台灣最大程式設計社群網站
線上人數
549
 
會員總數:242472
討論主題:187513
歡迎您免費加入會員
討論區列表 >> C# >> c語言的質數問題
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
c語言的質數問題
價值 : 5 QP  點閱數:181 回應數:3

樓主

彭成皓
門外漢
0 1
6 0
發送站內信

我想印出前15個質數 程式碼如下


#include<stdio.h>
#include<stdlib.h>

int main()
{
int i,a,num=0,z;

for(i=3;num<=15;i=i+2){
z=1;
for(a=2;a<=i-1&&z;a++){
if(i%a==0){

z=0;
}
if(z){
printf("%d\n",i);
num++;
z=0;}}
}



system("pause");
return 0;
}


結果有時會印出 9 15 21 27 33等...不是質數的數字
是哪裡出了問題??謝謝



搜尋相關Tags的文章: [ 質數 ] ,
本篇文章發表於2018-03-06 21:44
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

死神
檢舉此回應
你在if(i%a==0)上面加上這行可以幫助偵錯
printf("i=%d\t""a=%d\t""z=%d\t",i,a,z);

你會發現執行結果變成


原因出在你的for(a=2;a<=i-1&&z;a++)這行,a永遠都不會大於2
然後,你的i都會是奇數(i = 3,但i每次都+2的關係)
之後到你的判斷式(i%a==0),這裡也不會整除了奇數除以2都會餘1
只會往下跑結果等於if (z)這行,z你又預設給他1,所以整個程式跑下來就會印出都是奇數的結果
順帶一提,你的外層for迴圈如果只要跑15次,你有兩個地方可以改,1.把sum預設值設為1 2.把迴圈裡的,<=15改成<15


我的寫法如下
#include<stdio.h>
#include<stdlib.h>

int main()
{
int i, a, num = 0, count = 0/*用來計算因數有沒有大於2*/;

for (i = 3; num < 15; i++)
{
for (a = 1; a <= i; a++)
{
if (i%a == 0)
{
count++;//只要i能夠整除a,count就+1
}
}

if (count<=2) //當count>2(除了1與數字本身還有其他因數就不符合質數條件)
{
printf("%d\n", i);
num++;

}
count = 0;//計數器歸零,讓下一個數字使用

}



system("pause");
return 0;
}

我拿了你的方法去修改,希望有幫助到你:))
本篇文章回覆於2018-04-13 22:02
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

死神
檢舉此回應
阿圖片出不來 我補充在這裡
i=3 a=2 z=1 3
i=5 a=2 z=1 5
i=7 a=2 z=1 7
i=9 a=2 z=1 9
i=11 a=2 z=1 11
i=13 a=2 z=1 13
i=15 a=2 z=1 15
i=17 a=2 z=1 17
i=19 a=2 z=1 19
i=21 a=2 z=1 21
i=23 a=2 z=1 23
i=25 a=2 z=1 25
i=27 a=2 z=1 27
i=29 a=2 z=1 29
i=31 a=2 z=1 31
i=33 a=2 z=1 33
本篇文章回覆於2018-04-13 22:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

tenco
檢舉此回應
這是我的 C# 寫法, 請你參考看看

本篇文章回覆於2018-05-11 10:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.