[英]how to make loop in this case?
我需要計算前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);
}
我不知道您使用的是哪種語言,所以我正在對此猜測(我無法發表評論)-
您是否在答案中得到所有奇數作為輸出? 9,11,13,15 ...看來您正在打印出所有'new'值,無論是否素數為true。 也許您應該放一個
if (prime) {
printf("%d->%d\n",gg, new);
}
那里
用
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加到奇數上。 BTW為什么說continue
作為循環中的最后一件事? 這可能會更好(我可以自由地將其放入函數中):
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);
}
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.