#1
|
||||
|
||||
輸入一數之後,求其中有哪些是質數 ?
我自己想的一個求有哪些質數的程式碼,有些錯誤,但似乎是能把質數找出來,只是它印出來的結果會重複好幾次。
能否請先進幫我看看,就我寫的這種寫法,有哪些地方出錯?也許還有不可見的錯誤。 如果覺得整個錯誤,也請告知,我尚未看網上相關的寫法。 thanks. 使用者輸入一數字後,算出從一到該數字中有多少質數? #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; } |
#2
|
|||
|
|||
可以这样写:
#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; }
__________________
收购各位版友的四字母com、数字米com/net/cc、三杂米com、拼音米。价格随行市价。站内联系。 |
#3
|
||||
|
||||
引用:
十分感謝,果然沒錯。 除了 if(x%y!=0 and x!=1) prime=x; 這裡要改一下成為 if((x%y!=0) && x!=1) prime=x; |
#4
|
||||
|
||||
#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的情形啊? |
#5
|
|||
|
|||
您原先写的程序,“它印出來的結果會重複好幾次”。
例如,7 会重复4次。 这是因为,测试7的时候,是质数,输出7; 测试8的时候,不是质数,又打印了7; 测试9、10的时候,又打印两次7; 测试11的时候,开始打印11。 我修改的部分,当当前的数是质数的时候,存进prime打印;当当前的数不是质数的时候,把0存进prime,表示不是质数,不要打印了。 这只是避免重复打印而已。没有别的含义。
__________________
收购各位版友的四字母com、数字米com/net/cc、三杂米com、拼音米。价格随行市价。站内联系。 |
#6
|
||||
|
||||
引用:
容我好好想一想,看能否想通?我顯然在這裡就卡關了,百思不得其然。 |