練習4-11 統計素數並求和 (20 分)算法
本題要求統計給定整數M和N區間內素數的個數並對它們求和。函數
輸入格式:
輸入在一行中給出兩個正整數M和N(1)。測試
輸出格式:
在一行中順序輸出M和N區間內素數的個數以及它們的和,數字間以空格分隔。加密
輸入樣例:
10 31
輸出樣例:
7 143
#include <stdio.h> #include<math.h> int p(int n); int main() { int n, m, i, count=0, sum=0; scanf("%d%d", &n, &m); for(i=n;i<=m;i++) { if(p(i)==1) { sum=sum+i; count++; } } printf("%d %d",count,sum); return 0; } int p(int n) { int i; for(i=2;i<=sqrt(n);i++) if(n%i==0) break; if(n<=0||n%1!=0) return 0; else if(i>sqrt(n)&&n!=1) return 1; else return 0; }
科普:spa
質數(Prime number),又稱素數,指在大於1的天然數中,除了1和該數自身外,沒法被其餘天然數整除的數(也可定義爲只有1與該數自己兩個正因數的數)。大於1的天然數若不是素數,則稱之爲合數(也稱爲合成數)。例如,5是個素數,由於其正約數只有1與5。而6則是個合數,由於除了1與6外,2與3也是其正約數。算術基本定理確立了素數於數論裏的核心地位:任何大於1的整數都可被表示成一串惟一素數之乘積。爲了確保該定理的惟一性,1被定義爲不是素數,由於在因式分解中能夠有任意多個1(如三、1×三、1×1×3等都是3的有效約數分解)。code
古希臘數學家歐幾里得於公元前300年先後證實有無限多個素數存在(歐幾里得定理)。現時人們已發現多種驗證素數的方法。其中試除法比較簡單,但需時較長:設被測試的天然數爲,使用此方法者需逐一測試2與之間的整數,確保它們無一能整除n。對於較大或一些具特別形式(如梅森數)的天然數,人們一般使用較有效率的算法測試其是否爲素數(例如277232917-1是直至2018年8月爲止已知最大的梅森素數,也是直至2018年8月爲止已知最大的素數)。雖然人們仍未發現能夠徹底區別素數與合數的公式,但已建構了素數的分佈模式(亦即素數在大數時的統計模式)。19世紀晚期獲得證實的素數定理指出:一個任意天然數n爲素數的機率反比於其數位(或的對數)。blog
許多有關素數的問題依然未解,如哥德巴赫猜測(每一個大於2的偶數可表示成兩個素數之和)及孿生素數猜測(存在無窮多對相差2的素數)。這些問題促進了數論各個分支的發展,主要在於數字的解析或代數方面。素數被用於資訊科技裏的幾個程序中,如公鑰加密利用了難以將大數分解成其素因數之類的性質。素數亦在其餘數學領域裏造成了各類廣義化的素數概念,主要出如今代數裏,如素元及素理想。ip
來源:維基百科-質數(https://zh.wikipedia.org/wiki/%E7%B4%A0%E6%95%B0)get