1樓:風若遠去何人留
這是乙個數學問題。
質數的定義為,除了1和本身,沒有其它因子,即沒有其它數可以被其整除。
對於任意的數n,因子肯定是比n小的數,所以如果m>n,那麼m不可能是n的因子。
於是最直觀的判斷方法就是,從1一直到n計算模除,獲取到因子總數,如果總數為2,那麼就是質數。
這樣對於任意的n,判斷質數就需要做n次模除。為了使程式優化,可以修改為,對2到n-1做模除,只要有乙個可以整除,那麼就不是整數。
對於這樣的演算法,可以再次優化。
如果n有乙個引子m, 那麼可以寫作n = m*k的形式,那麼m和k不可能同時大於n的平方根s。
這一點可以用反證法來證明。
如果m>s 且k>s
那麼m*k > s*s
於是得到n>n的結論。明顯是錯誤的。
於是m和k至少有乙個是小於等於s的。
這樣在判斷質數時,只需要從2一直到s做模除,就可以準確的判斷是否有其它因子,從而得到是否為質數的結論。
這就是為什麼在判斷質數中的程式中會用到求平方根的原因。其本質原因是為了減少模除次數,提高效率。
2樓:淦海瑤
不用也可以, k=sqrt(m); for(i=2;i<=k;i++) 這個可以換成
for(i=2;i*i<=m;i++)
為什麼需要這個sqrt(m),其實是為了減少迴圈次數而已
有三個迴圈次數,乙個是m-1,乙個是m/2(m的一半),最後乙個是sqrt(m),這三個數,都可以,但是sqrt(m)最小
m-1不用說,肯定是可以的,素數的定義就是這樣
m/2這個也是可以的,m/2~m之間肯定不會有他的因子,因為這個區間的數值乘以最小的係數2都比m大
sqrt(m)這個難理解一點。因為某個數的因子肯定是圍繞sqrt(m)這個數值的在兩邊排列的
也就是說,在1~sqrt(m)之間有個因子,那麼m除以這個因子得到的數值肯定在sqrt(m)~m之間,所以計算一次就夠了
而且sqrt(m)這個數值比m/2要小,所以為了減少計算次數,用這個是最好的
100肯定不是素數,這是定下的,呵呵
c語言程式設計:找出100~200之間的所有素數,
3樓:紅山人
#include
main()
printf("n=%d",n);/*列印素數個數*/}
4樓:匿名使用者
#include
#include
int prime(int n)/*判斷是否為素數函式,是返回1,不是返回0 */
return 1;/*如果是素數,返回1*/} main(void)
getch();}
5樓:余帆
101,103,109,111,113......
6樓:
#include
#include
int main()
}if(flag)
}return 0;}
7樓:
#include
bool issushu(int n)
void main()
i+=2; } }
編寫c語言程式,求100~200之間所有素數。
8樓:匿名使用者
素數就是只能被1和本身整除的數,先定義乙個函式用於判斷乙個數是否是素數,在從100到200依次迴圈判斷,如果是素數則輸出。
#include
int fun(int n){//判斷n是否是素數int i;
for(i=2;i
9樓:彌鷗逮成蔭
#include
void
main()
void
outputsushu(int
k)if(w==0)
printf("%d\t是素數\n",k);
else
printf("%d\t不是素數\n",k);}
10樓:王澤無敵真的
# include
# include
int main()
if(k>sqrt(i*1.0))
if(n%10==0)
printf("\n");
}return 0;}
11樓:
#include
#include
int isprime(int n)
void main()
printf("\n");
for(i=2;i<1000;i++)
12樓:匿名使用者
#include
#include
#include
int primer_number(int lower, int upper)
if (flag == 0)
count++;
}return count;
}int main(void)
c語言程式設計 求100-200之間的全部素數
13樓:匿名使用者
把else那行去掉
在第二個for後面
if(i == sqrt(n))
printf("%d\n", n);
求c語言程式設計高手幫忙,求C語言程式設計高手幫忙!!!
初看,程式應先宣告乙個包含20個整型數元素的陣列,但從程式目標來看,根本不需要所有的數,而只需找出次大的數而已,所以只要宣告三個整型變數 輸入 input 最大數 max 次大數 sec 即可。而且從記憶體利用率來看,這樣也更節省記憶體空間。以下程式你的所有要求都滿足了,僅供參考 include c...
C語言程式設計題求1,C語言程式設計題求112131415前30項的和。
include int main int argc,char argv sum 1000 n int sum temp n temp 10 if temp 4 n 1 n 10 printf 2f n n 100.0 return 0 可能抄 有點襲冗長,可以修改精煉下 哈,呵呵 include i...
C語言程式設計題,求大神解答呀,c語言程式設計題求大神幫忙!
如果檔案中有其他的字元 只轉小寫字母的話 用下面的 int main fclose fp delete rbuffer 其實這個題目涉及的知識點主要有如下幾點 1.txt檔案的讀寫 2.字串和byte的轉換 3.字母大小寫的判斷 可以通過字母對應的asci碼值的大小範圍來區分 謝謝!c語言程式設計題...