我需要计算前100个素数,但在输出中我得到“9”而其他数字在我的数字中....................... i想要计算前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);
}
答案 0 :(得分:0)
我不知道你在编写什么语言,所以我猜这个(我还不能发表评论) -
你在答案中得到所有奇数作为输出吗? 9,11,13,15 ...... 无论素数是否真实,您似乎都打印出了“新”的所有值。也许你应该放一个
if (prime) {
printf("%d->%d\n",gg, new);
}
有
答案 1 :(得分:0)
用
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);
continue
它将起作用。
一旦你进入这一部分,你就不需要检查是否有东西,因为你总是将2加到一个奇数。
BTW为什么说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);
}
是循环中的最后一件事?
这可能会更好(我冒昧地把它放在一个函数中):
{{1}}
答案 2 :(得分:0)
here is an example program from:
http://www.programmingsimplified.com/c/source-code/c-program-for-prime-number
note: 1 is not a prime number, see:
http://primes.utm.edu/notes/faq/one.html
#include<stdio.h>
int main()
{
int n, i = 3, count, c;
printf("Enter the number of prime numbers required\n");
scanf("%d",&n);
if ( n >= 1 )
{
printf("First %d prime numbers are :\n",n);
printf("2\n");
}
for ( count = 2 ; count <= n ; )
{
for ( c = 2 ; c <= (i - 1) ; c++ )
{
if ( i%c == 0 ) break;
}
if ( c == i )
{
printf("%d\n",i);
count++;
}
i++;
}
return 0;
}