2011年5月24日 星期二

Online Judge-Prime(質數建表)

Problem:輸入n (1<=n<=1,000,000) 判斷n是否為質數. 如果x為一非質數之正整數,必有小於等於根號x之質因數. 建立給定範圍開根號以內之質數表(一百萬根號即一千),接著判斷n是否能整除這些質數,如不可則為質數.

#include<stdio.h>
#include<math.h>
int main()
{
        //建立質數表
        int n,j,i,s=2,f[168],x;
        f[0]=2;f[1]=3;
        for(i=5;i<=1000;i++)
        {
                x=sqrt(i);
                for(j=2;j<=x;j++)
                {
                        if(i%j==0)break;
                }
                if(j>x){f[s]=i;s++;}
        }
        while(scanf("%d",&n)!=EOF)
        {

                if(n==0)break;
                if(n==1){printf("1\n");continue;}
                if(n==2||n==3){printf("0\n");continue;}
                else
                {
                        //判斷n是否可整除質數表裡的質數
                        i=0;
                        x=sqrt(n);
                        while(f[i]<=x)
                        {
                                if(n%f[i]==0){printf("1\n");break;}
                                i++;
                        }
                        if(f[i]>x)printf("0\n");
                }
        }
        return 0;
}

沒有留言:

張貼留言