如何編寫乙個關於素數的程式

2025-01-29 09:05:27 字數 3303 閱讀 9212

1樓:湛藍水晶

#include

int prime(int valu);

int main()

int number;

doscanf("%d",&number);

printf("%d",prime(number));

while(number);

return 0;

int prime(int valu) /返回0為非素數,1為素數。

int i,flag;

for (i=2;i<=(valu/2);i++)if (0==valu%i) return 0;

return 1;

to 樓下的。

輸入2的話for迴圈直接不執行,return 1以上程式在dev c++下編譯測試通過。

對於大的數,的確是用平方根去判斷效率高一點,或者用篩法將素數儲存在陣列中,用空間換時間。

2樓:網友

二樓的程式如果輸入2會怎麼樣?好象判定為非負數。

#include

#include ""

bool isprime(int valu);

int main()

int number = 1;

while(number!=0)

scanf("%d",&number);

if(number <=0)

break;

if(isprime(number))

printf(..

elseprintf(..

return 0;

bool isprime(int valu) /返回flase為非素數,true為素數。

if(valu==1 ||valu%2 ==0)

return flase;

if(valu==2 ||valu==3)

return true;

int i, flag=sqrt(valu)+1;

for (i=3;i<=flag;i +=2)

if (valu%i ==0) return flase;

return true;

思路和上面差不多吧,解決了幾個邊界值(0~3,另外把負數也作為退出條件),改變迴圈結構為了不去判斷非法資料。

在bool()中用了一些特殊值的判斷,但是效率提高了一半左右(當valu比較大的時候),我覺得是值得的。

對於特別大的valu,用乙個線性表(陣列就行了吧)儲存小於其開方的質數應該是比較高效的,有興趣不妨試試。

編寫程式,要求50~200間的全部素數

3樓:匿名使用者

寫了一段fortran**,一共有31個素數;

具體演算法見**中的綠凱早色字型注盯擾雀釋。

31個素數具體是:53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,李知131,137,139,149,151,157,163,167,173,179,181,191,193,197,199。

附:計算結果和fortran**。

4樓:做而論道

編寫乎悄程式,要求50~200間的全部素數。

共有 31 個素數。

程式帆頃搭如態拿下:

編寫程式判斷是否為素數?

5樓:刺友互

1、寫我們的標頭檔案和主函式。寫好我們的開頭。

2、編寫定義變數,我們語言定義乙個i來用於後面的for循伍旦環。

3、我們輸入乙個數,在那之前我們要有乙個printf()提示一下。

4、利用for迴圈看一看從2到n-1是否能被n整除,腔粗擾如果能就要break。

5、判斷素數,如果程式正常結束,就i>=n,說明他就是素數。

6、如果通過break結束,他就會i<>

7、輸出最後結果。凳早。

程式設計素數問題

6樓:網友

1全部假設存在乙個大於根號m的數a可以整除m。

那麼m可以寫成m=a*b的形式。

然後判斷b的大小?

由於a>b且a>根號m,所以b《根號m,那麼「在判斷至b時,就已經可以得出m不是素數了」,即「只需判斷是否能被2~(根號m)之間的數整除即可」,論點正確。

7樓:網友

因為比根號m大的數,一定是比根號m小的數的倍數。

素數的c語言程式怎麼做?

8樓:我是小星星欣欣

素數,也叫質數,就是指除了1和該數本身以外,不能被其他任何整數整除的正數山鄭基。

#include#includevoid main(){int m, k, i, n=0; for(m=1; m <=200; m=m+2) {k = sqrt(m); for(i=2; i <=k; i++)if(m % i ==0) break; if(i >=k + 1) {printf("%5d",m); n = n + 1;

素數

所謂素數是指除了1和它本身以外,不能被任何整數整除的數,例如17就是素數,因為它不能被2~16的任一整數整除。因此判斷乙個整數m是否是素數,只需把m被逗謹2~m-1之間的每乙個整數去除,如果都不能被整除,那麼m就是乙個素數。

另外判斷方法還可以簡化。m不必唄2~m-1之間的每乙個整數去除,只需被2~√m之間的每乙個整數去除就可以了。如果m不能被2~√m間任一整數整除,m必定是素數。

例如判別17是是否為素數,只需使17被2~4之間的每乙個整數去除,由於都不能整除,可以判定17是素數。(原因:因為如果m能被2~m-1之間任一整數整叢豎除,其二個因子必定有乙個小於或等於√m,另乙個大於或等於√m。

例如16能被2,4,8整除,16=2*8,2小於4,8大於4,16=4*4,4=√16,因此只需判定在2~4之間有無因子即可)

9樓:來麼

很簡單的,多用幾次for和if的慎兆巢狀就好了,具體如下:

#include ""

void main()

int a,b;

int i,n;

int flag=1;

printf("請輸入上限:")

scanf("%d",&a);

printf("請輸入下限:")

清罩scanf("%d",&b);

printf("%d到%d之間的素數為:",a,b);

for (i=a;i<=b;i++)

flag=1;

for (n=2;n

用VB編寫程式,用VB編寫一個程式

樓上的,不許要引用吧 option explicit private declare function getdrivetype lib kernel32 alias getdrivetypea byval ndrive as string as long private declare funct...

編寫c程式求1 2 3 ,編寫一個c程式 求1 2 3

include int main printf 1 權 2 20 ld sum return 0 main printf ld s 上面復的程式都已經制溢位了,int哪能儲存那麼大的數呀,應該用陣列來分割儲存!include int main m 2,t 3 for m 1 m 20 m c 1 t...

C 編寫小程式(思路即可),C 編寫一個小程式(思路即可)

求出該整數的各個位 比如 125,百位為1,十位為2,個位為5 依次放入int型陣列,x 另外定義一個9個大小的int陣列a,初始化為0然後迴圈,每個迴圈裡switch x i case 1 a 0 省略 第一步 先判斷輸入的整數是多少位的,比如輸入的是 123 就是三位的 第二步 將這個數除以10...