天天看點

wikioi1430素數判定

 題目描述 Description

質數又稱素數。指在一個大于1的自然數中,除了1和此整數自身外,不能被其他自然數整除的數。

素數在數論中有着很重要的地位。比1大但不是素數的數稱為合數。1和0既非素數也非合數。質數是與合數相對立的兩個概念,二者構成了數論當中最基礎的定義之一。基于質數定義的基礎之上而建立的問題有很多世界級的難題,如哥德巴赫猜想等。算術基本定理證明每個大于1的正整數都可以寫成素數的乘積,并且這種乘積的形式是唯一的。這個定理的重要一點是,将1排斥在素數集合以外。如果1被認為是素數,那麼這些嚴格的闡述就不得不加上一些限制條件。

概念

隻有1和它本身兩個約數的自然數,叫質數(Prime Number)。(如:由2÷1=2,2÷2=1,可知2的約數隻有1和它本身2這兩個約數,是以2就是質數。與之相對立的是合數:“除了1和它本身兩個約數外,還有其它約數的數,叫合數。”如:4÷1=4,4÷2=2,4÷4=1,很顯然,4的約數除了1和它本身4這兩個約數以外,還有約數2,是以4是合數。)

100以内的質數有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,在100内共有25個質數。

注:(1)1既不是質數也不是合數。因為它的約數有且隻有1這一個約數。

(2)2和3是所有素數中唯一兩個連着的數 .

輸入描述 Input Description

第一行輸入一個正整數n,n<=30000

輸出描述 Output Description

如果該數是質數,則輸出\t

否則輸出\n

樣例輸入 Sample Input

輸入樣例1

13

輸入樣例2

8

樣例輸出 Sample Output

樣例輸出1

\t

樣例輸出2

\n

資料範圍及提示 Data Size & Hint

c或c++的初學者注意,"\"的意思

素數的判定方法:它如果存在因數,那麼一定可以寫成乘積的形式。比如M = 1 * M。如果它存在兩

wikioi1430素數判定

個因數,乘積等于M,這兩個因數一定一個小于根号M,一個大于根号M,因為一定存在兩個相等的數乘積等于它(當然可能不是整數),這兩個數就是根号M,因為M = 根号M * 根号M。如果兩個數都在根号M以下,乘起來小于M,如果兩個數都在根号M以上,乘起來一定大于M,是以兩個數分布于根号M兩邊,那麼我們隻要找到其中一半有沒有這樣一個整數就可以了。如果有,自然對應的另一半也有一個和它對應的數,使它們的乘積為M。

綜上,對于試除周遊求法,隻需周遊到根号M即可。

#include <stdio.h>
#include <stdlib.h>

int IsPrime(int n)
{
    int i;
    for(i=2;i*i<=n;i++)
    {
        if(n%i==0)
            return 0;
    }
    return 1;
}
int main()
{
    int n;
    int flag;
    scanf("%d",&n);
    flag=IsPrime(n);
    if(flag==1)
        printf("\\t");
    else
        printf("\\n");
    return 0;
}<strong>
</strong>