浙大版《C語言程序設計(第3版)》題目集 練習4-11 統計素數並求和 (20 分)

練習4-11 統計素數並求和 (20 分)算法

本題要求統計給定整數M和N區間內素數的個數並對它們求和。函數

輸入格式:

輸入在一行中給出兩個正整數M和N(1)。測試

輸出格式:

在一行中順序輸出M和N區間內素數的個數以及它們的和,數字間以空格分隔。加密

輸入樣例:

10 31

輸出樣例:

7 143
 
思路:寫出一個判斷素數的函數,而後用count記錄素數出現的個數和sum統計素數的和。
 
代碼以下:
#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年先後證實有無限多個素數存在(歐幾里得定理)。現時人們已發現多種驗證素數的方法。其中試除法比較簡單,但需時較長:設被測試的天然數爲n,使用此方法者需逐一測試2與\sqrt{n}之間的整數,確保它們無一能整除n。對於較大或一些具特別形式(如梅森數)的天然數,人們一般使用較有效率的算法測試其是否爲素數(例如277232917-1是直至2018年8月爲止已知最大的梅森素數,也是直至2018年8月爲止已知最大的素數)。雖然人們仍未發現能夠徹底區別素數與合數的公式,但已建構了素數的分佈模式(亦即素數在大數時的統計模式)。19世紀晚期獲得證實的素數定理指出:一個任意天然數n爲素數的機率反比於其數位(或n的對數)。blog

許多有關素數的問題依然未解,如哥德巴赫猜測(每一個大於2的偶數可表示成兩個素數之和)及孿生素數猜測(存在無窮多對相差2的素數)。這些問題促進了數論各個分支的發展,主要在於數字的解析或代數方面。素數被用於資訊科技裏的幾個程序中,如公鑰加密利用了難以將大數分解成其素因數之類的性質。素數亦在其餘數學領域裏造成了各類廣義化的素數概念,主要出如今代數裏,如素元及素理想。ip

來源:維基百科-質數(https://zh.wikipedia.org/wiki/%E7%B4%A0%E6%95%B0get

相關文章
相關標籤/搜索