|
发表于 2024-1-15 16:08:27
|
显示全部楼层
在你的代码中,有两个问题导致结果不正确。
首先,你的循环条件是`j<600851475143/2`,这个条件太过宽松了。实际上,你只需要循环到`j<sqrt(600851475143)`即可,因为如果一个数n有除1和n本身之外的因子,那么这个因子肯定小于等于sqrt(n)。所以在循环中,应将循环条件修改为`j<=sqrt(i)`。
其次,你的代码中只记录了最后一个质数因子,而不是最大的质数因子。你可以在找到一个质数因子时,在内层循环中将i赋值给sum,这样每次找到更大的质数因子时,sum就会更新为更大的值。
下面是修改后的代码:
- #include <stdio.h>
- #include <math.h>
- int main() {
- long n = 600851475143;
- long sum = 0;
- for (long i = 2; i <= sqrt(n); i++) {
- if (n % i == 0) {
- // 找到一个质数因子
- sum = i;
- while (n % i == 0) {
- // 将n除以i,继续寻找下一个质数因子
- n /= i;
- }
- }
- }
- // 如果n不等于1,说明最后剩下的n也是一个质数因子
- if (n != 1) {
- sum = n;
- }
- printf("%ld\n", sum);
- return 0;
- }
复制代码
这个代码会输出最大的质数因子,希望对你有帮助!如果还有疑问,请随时提出。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|