gpt4 book ai didi

c - 试图找到质数

转载 作者:太空宇宙 更新时间:2023-11-03 23:58:50 26 4
gpt4 key购买 nike

我是一所编程大学的一年级学生,我的第一个作业是求 3990000000 到 4010000000 之间的质数之和。问题是我所做的一切,当我运行程序时它说总和为 0返回值为 25。我一直在尝试调试这段代码,但没有成功,有人可以帮助我吗?

我的代码是:

#include <stdio.h>
#define STARTNUMBER 3990000000
#define ENDNUMBER 4010000000

int main() {
unsigned int num;
int j, c, flag, sum = 0;
flag = 1;
c = 5;
j = 7;
for (num = STARTNUMBER; num <= ENDNUMBER; num++) {
if (num % 2 == 0) { /*if number mod 2 equals zero go to next number*/
flag = 0;
break;
}
if (num % 3 == 0) { /*if number mod 3 equals zero go to next number*/
flag = 0;
break;
} else
/*check if number is prime with the sequences 5+6+6...<=sqrt(number) and 7+6+6..<=sqrt(number)*/
while (c * c <= num && j * j <= num && flag == 1) {
if (num % c == 0 || num % j == 0) {
flag = 0;
break;
}
c += 6;
j += 6;
}
if (flag == 1)
sum++;
}
printf("There are %d prime numbers", sum);
}

最佳答案

您要求的是质数之和,即使您的代码只是打印质数的个数。假设您误解了该练习,我会尝试展示您原始问题的一个可能问题,瞥见您练习中的一个可能技巧,因为间隔非常接近 232

同时假设您处于 64 位环境中,如果该区间内至少有两个质数,则总和将大于 INT_MAX (231 - 1)。一个int不足以存储一个值,还有 unsigned int还不够,因为 UINT_MAX是 232 - 1。

最后,假设您已经使用 break 解决了问题评论中已描述的语句,请尝试存储您的 sum变量变为 unsigned long int ,并将循环的最后一部分替换为

if (flag==1)
sum += num;

关于c - 试图找到质数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53264136/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com