網域名稱俱樂部

網域名稱俱樂部 (https://www.domainclub.org/index.php)
-   一般軟體與網路使用討論 (https://www.domainclub.org/forumdisplay.php?f=43)
-   -   輸入一數之後,求其中有哪些是質數 ? (https://www.domainclub.org/showthread.php?t=36251)

哈啦 2014-03-13 10:06 PM

輸入一數之後,求其中有哪些是質數 ?
 
我自己想的一個求有哪些質數的程式碼,有些錯誤,但似乎是能把質數找出來,只是它印出來的結果會重複好幾次。

能否請先進幫我看看,就我寫的這種寫法,有哪些地方出錯?也許還有不可見的錯誤。

如果覺得整個錯誤,也請告知,我尚未看網上相關的寫法。

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;
}

yumi 2014-03-13 11:07 PM

可以这样写:
#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;
}

哈啦 2014-03-13 11:16 PM

引用:

作者: yumi (文章 190636)
可以这样写:
#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:

哈啦 2014-03-14 04:03 PM

#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的情形啊?

yumi 2014-03-14 09:19 PM

您原先写的程序,“它印出來的結果會重複好幾次”。
例如,7 会重复4次。
这是因为,测试7的时候,是质数,输出7;
测试8的时候,不是质数,又打印了7;
测试9、10的时候,又打印两次7;
测试11的时候,开始打印11。

我修改的部分,当当前的数是质数的时候,存进prime打印;当当前的数不是质数的时候,把0存进prime,表示不是质数,不要打印了。
这只是避免重复打印而已。没有别的含义。

哈啦 2014-03-14 09:57 PM

引用:

作者: yumi (文章 190655)
您原先写的程序,“它印出來的結果會重複好幾次”。
例如,7 会重复4次。
这是因为,测试7的时候,是质数,输出7;
测试8的时候,不是质数,又打印了7;
测试9、10的时候,又打印两次7;
测试11的时候,开始打印11。

我修改的部分,当当前的数是质数的时候,存进prime打印;当当前的数不是质数的时候,把0存进prime,表示不是质数,不要打印了。
这只是避免重复打印而已。没有别的含义。

:bow~yes~yes

容我好好想一想,看能否想通?我顯然在這裡就卡關了,百思不得其然。


所有時間均為 +8。現在的時間是 01:28 AM

Powered by vBulletin® 版本 3.8.4
版權所有 ©2000 - 2024,Jelsoft Enterprises Ltd.