gpt4 book ai didi

c - 在这种情况下如何制作循环?

转载 作者:行者123 更新时间:2023-11-30 17:49:16 26 4
gpt4 key购买 nike

我需要计算前 100 个素数,但在输出中我得到了“9”和其他数字............我想要计算前 100 个素数

{
bool prime; int start, new, kor,k, i,gg;
start=1;
k=1 ;
gg=0;
do
{

if (start < 2) {new = 2;}
if (start == 2) {new = 3;}
if (start > 2) {
if ((new % 2) == 0)
new--;
do {
prime = true;
kor=sqrt(new);
new+=2;
for (i=3;prime&& (i<=kor); i+=2) {
if (new % i == 0)
prime=false;}
} while (!prime) ;
}
gg++;
printf("%d->%d\n",gg, new);
k++;
start++;
continue;
}
while (k<101);

}

最佳答案

if (start < 2) {new = 2;}
if (start == 2) {new = 3;}

第一个和第二个数字有特殊情况。下一次在 do...while 循环中,我们跳过 for 循环,因为 kor 是 1,从而打印 5。我们没有检查,所以也许我们只是得到了幸运的。听起来我们检查得不够彻底。

下次,之后

kor=sqrt(new1); new1+=2;

kor 是 2,所以我们再次不执行 for 循环,并打印 7。下次我们遇到同样的情况。 kor 仍然是 2,所以你得到 9。

认为如果您将new+=2切换到kor=sqrt(1);之前它会起作用的。一旦进入这一部分,您就不需要检查是否为偶数,因为您总是将 2 加到奇数上。顺便说一句,为什么它说继续作为循环中的最后一件事?这可能会更好(我冒昧地将它放在一个函数中):

void find_primes()
{
bool prime; int start, new, kor,k, i,gg;
start=1; k=1 ;gg=0;
do
{
if (start < 2) {new = 2;}
if (start == 2) {new = 3;}
if (start > 2) {
do {
prime = true;
new+=2;
kor=sqrt(new);
for (i=3;prime&& (i<=kor); i+=2) {
if (new % i == 0)
prime=false;
}
}
while (!prime) ;
}
gg++; printf("%d->%d\n",gg, new);
k++;
start++;
}
while (k<101);
}

关于c - 在这种情况下如何制作循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17973149/

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