當前位置:編程學習大全網 - 編程語言 - 判斷整數N(N & gt;2)是否是素數的編程。

判斷整數N(N & gt;2)是否是素數的編程。

關於素數的確定

所謂“篩選法”是指“厄拉多塞篩選法”。他是古希臘著名的數學家。他的方法是把1到100的所有整數寫在壹張紙上,然後逐個判斷是否是質數,找出壹個非質數,把它挖出來,最後剩下的就是質數。

具體做法如下:

& lt1 & gt;先挖出1(因為1不是質數)。

& lt2 & gt把後面的數除以2,挖出能被2整除的數,也就是挖出2的倍數。

& lt3 & gt把後面的數字除以3,挖出3的倍數。

& lt4 & gt用數字4、5…作為除數來除數。這個過程壹直持續到除數之後的所有數字都被挖出。比如求1 ~ 50的質數,要壹直持續到除數為47(其實可以簡化。如果需要在1 ~ n的範圍內尋找素數表,只需要走到除數為n ^ 2(根號n)並取其整數即可。比如1 ~ 50,只能用50 ^ 2做除數。)

上述算法可以表示為:

& lt1 & gt;挖出1;

& lt2 & gt用剛挖出的數的下壹個數p除以p後的數,挖出p的倍數;

& lt3 & gt檢查p是否小於n ^ 2的整數p<(如果n=1000,檢查p

& lt4 & gt紙上剩下的數字是質數。

# include & ltstdio.h & gt

# include & ltmath.h & gt

int main(void)

{

int I;

int j;

int a[101];//對於可視化表示,每個元素對應壹個下標,不使用元素0。

for(I = 1;我& lt= 100;I++) //數組中每個元素的賦值

a[I]= I;

for(I = 2;我& ltsqrt(100);I++) //外循環使I成為除數。

for(j = I+1;j & lt= 100;J++) //內循環檢測除數I後面的數是否是I的倍數。

{

如果(a[i]!= 0 & amp& ampa[j]!= 0) //排除零值元素

if (a[j] % a[i] == 0)

a[j]= 0;//如果I後面的數是I的倍數,就設為0(截出)即可。

}

int n = 0;//統計輸出質數,控制換行顯示。

for(I = 2;我& lt= 100;I++) //輸出質數

{

如果(a[i]!= 0)

{

printf("%-5d ",a[I]);//輸出數組中的非零元素(未挖掘的數)

n++;

}

如果(n == 10)

{

printf(" \ n ");//每行10個輸出

n = 0;

}

}

printf(" \ n ");

返回0;

}

運行結果(VC):

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

  • 上一篇:標誌設計的抽象表現形式分哪幾種?
  • 下一篇:單片機c語言編程求助!up51s的開發板!!!
  • copyright 2024編程學習大全網