1樓:匿名使用者
不知這個程式清單您是從**看來的?
您說的這一個問題,顯然是原程式的筆誤了。或者原來定義就該定成a[101],或者這裡的<=100應該改成<100,否則,陣列超界了。
另外,這個程式編的相當糟糕,名為「篩法」,實際上「篩法」的優點全都沒有體現。程式結構中大量「多此一舉」的操作。
篩法的主要優點是不需要反覆順序一個一個挨著判斷,而這裡的迴圈是j++,依然是每次加1,挨著判斷;
篩法的另一個優點是不需要做除法,而這裡依然是挨著做除法。
本來,求一個數的「倍數」,只需要做乘法,甚至乘法也不必要,依次做加法即可。但這裡卻將所有的數都挨個用「嘗試法」來除一除,看是不是它的倍數,用一句雖然難聽但卻切中要害的話來評價:「脫褲子放屁多此一舉」。
如此,在「篩法」中新增了大量「多此一舉」的操作後,其效率絲毫不比最笨的「嘗試法」高,還有什麼意義呢?
我把這一段程式改一下您看如何:
#include
#include
int main()
2樓:匿名使用者
a[100]裡面有101個數 a[0]~a[100]
而不是100個數
用篩選法求100之內素數
3樓:_葉子妞妞
首先 你這個並不是篩選法
其次 按照你的** 並沒有用到所謂的a[i]所以 連同上面的
for (i = 1; i <= 100; i++)一起註釋掉就好
c語言問題:用篩選法求100之內的素數。(利用陣列。)
4樓:呆死了
/*素數是隻能被1和本身整除的數,1除外
*/#include
// 用maxnumber表示100,方便以後程式的修改
#define maxnumber 100
void getprime();
int main()
void getprime()
// 從2開始到startnumber結束,用startnumber去對i求模
// 如果startnumber%i==0 表示startnumber不是素數,因為它能被i整除
for(i = 2; i < startnumber; i++)
}// 跳出for迴圈後判斷這個數是不是素數
// 如果i>=startnumber表示這個for迴圈不是通過break跳出的
// 而是執行到i=startnumber,即i= startnumber)
}printf("\n");}/*
求素數有很多方法,這個只是入門級別的方法。*/
c語言程式設計:用篩選法求100之內的素數,
5樓:小夏在深圳
源**如下:
#include
#include
int main()
int a, b, i, flag;
printf("輸入兩個整數: ");
scanf("%d %d", &a, &b);
printf("%d與%d之間的素數為: ", a, b);
while(aflag=0;
for(i=2; i<=sqrt(a); i++)if(a%i==0)
flag=1;
break;
if(flag==0)
printf("%d ", a);
a++;
return 0;
}擴充套件資料一個偶數總能表示為兩個素數之和的源**如下:
#include "stdio.h"
#include "math.h"
main()
int a,b,c,d;
scanf("%d",&a);
for(b=3;b<=a/2;b+=2)
for(c=2;c<=sqrt(b);c++)if(b%c==0) break;
if(c>sqrt(b))
d=a-b;
else
break;
for(c=2;c<=sqrt(d);c++)if(d%c==0)
break;
if(c>sqrt(d))
printf("%d=%d+%d\n",a,b,d);
for(int i=5;i<=sqrt(x);i+=6)if(x%i==0||x%(i+2)==0)printf("%d不是素數",x);
return 0;
printf("%d是素數",x);
return 0;}
6樓:匿名使用者
樓主你好!
你這樣寫的,會把1也認為是prime number。根據定義,1不是素數。2才是最小的素數!還把2是素數給漏掉!
for(m=1;m<=100;m=m+2)這裡應該為for(m=2;m<=100;m++)
在for()迴圈之前應該說明m=1時,不是素數!
希望我的回答對你有幫助!
7樓:匿名使用者
你這個是譚浩強c裡的習題吧,我直接給我的**給你,自己比對一下找找錯誤,
#include
#include
void main()
}for(i=1,j=0;i<1001;i++)if(j==8)
}printf("\n");
}樓下篩法原理講的差不多了,但有一條沒講,就是篩法只要迴圈到sqrt(n)就可以了,至於為什麼自己可以想一下。
c語言程式設計題:用篩選法求100以內的素數
8樓:小夏在深圳
素數。在一個大於1的自然數中,除了1和此整數自身外,不能被其他自然數整除的數。素數在數論中有著很重要的地位。比1大但不是素數的數稱為合數。1和0既非素數也非合數。
用篩選法求100以內的素數的源**如下
#include "stdio.h"
#include "stdlib.h"
main()
int i,j;
for(i=2;i<99; i++)
for(j=2; jif(i%j==0)
break;
if(j==i-1)
printf("%4d",i);
擴充套件資料求100以內的巧數的源**如下
#include
using namespace std;
int sum(int n)
return (n/10%10+n%10)+((n/10%10)*(n%10));
int main()
9樓:1024程式設計師
c語言經典例子之求100之內的素數
10樓:匿名使用者
方法一:
說明:從1至100放入陣列,將非素數置為0;
n用來控制輸出,每行輸出五個;
# include
# include
void main()
}for(i=1;i<=100;i++)
if(n%5==0)
printf("\n");}}
方法二:
說明:此方法是將2至100間各數的倍數置為0,則所剩的自然就是素數了;
# include
# include
void main()
}for(i=1;i<=100;i++)
if(n%5==0)
printf("\n");
}方法三:
說明:用goto語句實現;
# include
# include
void main()
printf("%d ",i);
n++;
if(n%5==0) printf("\n");
ab: i++;}}
方法四:
說明:用break;語句實現;
# include
void main()
if(j>sqrt(i))
if(n%5==0)
printf("\n");}}
11樓:
#include
#include
int main()
if (m%50==0)
printf("\n");
}return 0;}
12樓:匿名使用者
#include
#include
void main()
for (t=0;t<100;t++)
printf("%d",t[t]);}
13樓:
7,8句先對定義陣列中所有元素賦值為1;第九句是遍歷所有的數,使用了篩分法;其中巢狀了一個迴圈(12,13句)只要序號是已知質數的倍數該陣列元素都被賦值為0;該迴圈外面是一個判斷語句(10句)只要下標是質數都會進入迴圈判斷中。最後輸出的是陣列的下標,只要陣列元素值仍然為1就說明其下標不是任何一個素數的倍數,那麼它就是一個素數。
用c語言篩選法求100以內的素數
14樓:
先建立一個陣列賦值為2-100
再用二重迴圈標記每個素數的倍數為0,最後列印出為被標記不為0的數即為素數
#include "stdio.h"
#define size 99
int main()
int a[size],i,j;
for(i=0;ia[i]=i+2;
for(i=0;iif(a[i])
for(j=i+1;jif(a[j]%a[i]==0)a[j]=0;
for(i=0;iif(a[i]!=0)
printf("%d\t",a[i]);
printf("\n");
return 0;結果
用c 編寫求1000以內的素數及所有素數的個數
include int main cout 3 for int i 2 i n 2 i if n i 0 break if i 1 n 2 cout 判斷素數,是學習c c 必接觸的一個演算法。answerintheinternet.cpp 定義控制檯應用程式的入口點。include stdafx....
用支路電流法求圖1811中的I和U
12 6 i 2 3 i 9 i 24 i 8 3 2.67a 我不會蹭個金幣謝謝笑哭 這就是這道題的計算方法 這應該是大學類比電路的例題吧,根據課本上的分析來就行,按部就班地做 我也不會,哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈 為什麼串聯電路中各部分電路兩端電壓與其電阻成反比 理工學科 電流i...
求小數的近似數可以用什麼法,求一個小數的近似數可以用什麼法
求一個小數的近似抄 數可以用四捨五入法 進一法和去尾法。1.四捨五入法 在取小數近似數的時候,如果尾數的最高位數字是4或者比4小,就把尾數去掉。如果尾數的最高位數是5或者比5大,就把尾數捨去並且在它的前一位進 1 這種取近似數的方法叫做四捨五入法。例如 將數字2.1875精確保留到千分位 小數點後第...