查看完整版本 : 輸入一數之後,求其中有哪些是質數 ?
我自己想的一個求有哪些質數的程式碼,有些錯誤,但似乎是能把質數找出來,只是它印出來的結果會重複好幾次。
能否請先進幫我看看,就我寫的這種寫法,有哪些地方出錯?也許還有不可見的錯誤。
如果覺得整個錯誤,也請告知,我尚未看網上相關的寫法。
thanks. :bow
使用者輸入一數字後,算出從一到該數字中有多少質數?
#include <stdio.h>
int main(void)
{
int num,x,y,prime;
printf("enter a number: \n");
scanf("%d",&num);
for(x=1;x<num;x++) {
for(y=2;y<=x/2;y++)
if((x%y)==0) break;
if((x%y)!=0) prime=x;
printf("%d\n",prime);
}
return 0;
}
可以这样写:
#include <stdio.h>
int main(void)
{
int num,x,y,prime;
printf("enter a number: \n");
scanf("%d",&num);
for(x=1;x<=num;x++) {
for(y=2;y<=x/2;y++)
if(x%y==0) {prime=0;break;}
if(x%y!=0 and x!=1) prime=x;
if (prime!=0) printf("%d\n",prime);
}
return 0;
}
可以这样写:
#include <stdio.h>
int main(void)
{
int num,x,y,prime;
printf("enter a number: \n");
scanf("%d",&num);
for(x=1;x<=num;x++) {
for(y=2;y<=x/2;y++)
if(x%y==0) {prime=0;break;}
if(x%y!=0 and x!=1) prime=x;
if (prime!=0) printf("%d\n",prime);
}
return 0;
}
十分感謝,果然沒錯~yes。 除了 if(x%y!=0 and x!=1) prime=x; 這裡要改一下成為 if((x%y!=0) && x!=1) prime=x; ~embarass:
#include <stdio.h>
int main(void)
{
int num,x,y,prime;
printf("enter a number: \n");
scanf("%d",&num);
for(x=1;x<=num;x++) {
for(y=2;y<=x/2;y++)
if(x%y==0) {prime=0;break;}//為何這裡要增加 prime=0?
if((x%y!=0) && x!=1) prime=x;
if (prime!=0) printf("%d\n",prime); //為何要加if(prime!=0)
}
return 0;
}
有一點想不太通它的邏輯推演。
從邏輯上來說,prime=x,而x=1開始,且如果有prime=0則break,應該不會再出現有prime==0的情形啊?
您原先写的程序,“它印出來的結果會重複好幾次”。
例如,7 会重复4次。
这是因为,测试7的时候,是质数,输出7;
测试8的时候,不是质数,又打印了7;
测试9、10的时候,又打印两次7;
测试11的时候,开始打印11。
我修改的部分,当当前的数是质数的时候,存进prime打印;当当前的数不是质数的时候,把0存进prime,表示不是质数,不要打印了。
这只是避免重复打印而已。没有别的含义。
您原先写的程序,“它印出來的結果會重複好幾次”。
例如,7 会重复4次。
这是因为,测试7的时候,是质数,输出7;
测试8的时候,不是质数,又打印了7;
测试9、10的时候,又打印两次7;
测试11的时候,开始打印11。
我修改的部分,当当前的数是质数的时候,存进prime打印;当当前的数不是质数的时候,把0存进prime,表示不是质数,不要打印了。
这只是避免重复打印而已。没有别的含义。
:bow~yes~yes
容我好好想一想,看能否想通?我顯然在這裡就卡關了,百思不得其然。
vBulletin® v3.8.4,版權所有 ©2000-2026,Jelsoft Enterprises Ltd.