|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include <stdio.h>
- #include <math.h>
- int main()
- {
- long long i, j, k, l, num = 600851475143;
- _Bool flag = 1;
-
- for (i = 2, j = num / i; flag != 0; i++, j = num / i, flag = 1)
- {
- if(i * j == num)
- {
- k = sqrt((double)j);
- for (l = 2; l <= k; l++)
- {
- if(j %l == 0)
- {
- flag = 0;
- break;
- }
- }
- if(flag)
- {
- break;
- }
- }
- }
-
- printf("%lld\n", i);
-
- return 0;
- }
复制代码
以上就是标准答案了,我有两个地方不懂
第一:为什么i为最大质数因子?
最大质数因子i是87625999,而另一个质数因子为6857。那么for循环,i++先取到6857,此时j=87625999。
那么打印出来的i不应该是最大质数因子,这是我的第一个疑问。
第二:为什么中间要有if(i * j = num)?
在初始值中已经明确j = num / i,那么在循环体中还有其他可能吗?,比如呢?我试过把其注释掉,答案就变成了6,这差异也太大了吧。
本帖最后由 monkey-D 于 2021-10-7 21:30 编辑
没仔细研究,但你的问题第一i取到了6857这时肯定是不满足break出大for循环条件的,这是数学问题;第二long类型仍属于整形,有小数会自动向下取整,注释掉之后会有本来不应该进入的i进入判断导致错误。
|
|