English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

使用迴圈設計一個程式,找出2~100中所有的質數,每印出5個質數後換行顯示,執行結果如下。


2   3   5   7   11
13  17  19  23  29
31  37  41  43  47
53  59  61  67  71
73  79  83  89  97

2006-12-17 15:48:24 · 2 個解答 · 發問者 阿U 1 in 電腦與網際網路 程式設計

2 個解答

#include
#include //計算square root(平方根)時會用到
int Isprime(int n);
int main()
{
int a,b,i,count;
printf("Enter a,b:(a scanf("%d%d",&a,&b);
printf("%d到%d之間的質數有:\n",a,b);
for(i=a,count=0;i<=b;i++){
if(Isprime(i)){ //若Isprime(i)==1(成立),表示i是質數
printf("%d\t",i); //則印出i,counter+1
//\t代表印一個tab鍵的符號,也可以寫%5d之類的,表示用5個空格的空間去印想印的整數
count++;
if(count%5==0){
printf("\n"); //印出5個數之後換行
}
}
}

system("pause");
return 0;
}
int Isprime(int n) //這裡int n也可寫成double n,因為sqrt傳入值形態應該是double
//不過我沒轉形態也是可以算.. @﹏@ Dev-C++有時候有些warning都不會警告 XD
{
int i;
//下面這句..i<=(int)sqrt()是因為i是整數變數,所以要轉成int和i比較
//(double)n←因為sqrt的基本傳入形態是double,不過沒寫好像也可以算 @_@
for(i=2;i<=(int)sqrt((double)n);i++){ //檢查到i<=√n就可以了
//原因:n不是質數的話,一定能分解成一大於√n和一小於√n的兩數相乘或√n乘√n
//若√n也不能整除n,則n一定是質數。
if(n%i==0) //i整除n的話,表示n不是質數
return 0; //回傳0,跳出函式
}
return 1; //上面for迴圈檢查完,i皆不能整除n,則n是質數,回傳1
}


2006-12-17 22:24:09 補充:
sorry...半形的\會被自動消掉..所以有些換行的地方\

2006-12-17 22:25:18 補充:
要自己補上半形的斜線...這個應該看得懂吧 @﹏@

2006-12-20 20:18:52 補充:
哪裡不懂可以問...寄信問或加我的即時通都可以...

2006-12-17 16:42:13 · answer #1 · answered by ? 5 · 0 0

//Power by Microsoft Visual Studio 2005
//可以使用 Dev-C++ 編譯此程式
#include
#include
#include
#ifndef EOF
#define EOF (-1)
#endif
//全域函式
int CHECK_PRIME(double NUM);
int main(int argc, char *argv[]){
//=====START=====//
unsigned int i,j,range=100;
for(i=2,j=0;i<=range;i++){
if(CHECK_PRIME(i)==EOF){
printf("%3u",i);
printf("%s",(++j%5==0?"\n":""));
}
}
//=====END=====//
system("PAUSE");
return 0;
}
int CHECK_PRIME(double NUM){
int i,VALUE=EOF;
for(i=2;i<=(int)sqrt(NUM);i++){
if(EOF==CHECK_PRIME(i)){
if((int)NUM%i==0){
VALUE=0;
break;
}
}
}
return VALUE;
}

2006-12-17 16:20:28 · answer #2 · answered by Big_John-tw 7 · 0 0

fedest.com, questions and answers