24h購物| | PChome| 登入
2009-12-25 22:09:44| 人氣8,582| 回應1 | 上一篇 | 下一篇

奇摩知識+ 請寫出輸入一個數字判斷質數~用C++來寫

推薦 0 收藏 0 轉貼0 訂閱站台

範例輸入 :

2
3
25

範例輸出 :
Yes
Yes
No

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int Prime[5200]={0},p;
int prime()  //建出50000以內的質數
{
  char num[50000]={0};
  int a,b,m=0;
  for(a=2;a<50000;a++)   //線性篩法
      if(num[a]==0)   //如果它是個質數  則把它的倍數刪光
        {  
           Prime[m++]=a;  
           for(b=2;a*b<=50000;b++)   
             num[a*b]=1;  
        }
   return m;
}
int PrimeJudge (int num)
{
   int a,yes=0,s=(int)sqrt(num);  //在外面做開根號  內建很耗時間
   for(a=0;a<p&&Prime[a]<=s;a++) //質數判斷  跑2~sqrt(N) 切記要含!
      if(num%Prime[a]==0)  //判斷不是則跳出
         {yes=1;break;}
   if(yes==0) //回傳對與不對
      return 1;
   else
      return 0;  
}
main()
{
 p=prime();
 int n;
 puts("請輸出小於2147483648的數");
 while(scanf("%d",&n)==1)
     if(PrimeJudge(n)==1)  puts("Yes");
     else puts("No");
 return 0;  
}

台長: 來源不明
人氣(8,582) | 回應(1)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 不分類

某卦長
記得之前a007要用費馬小定理才可以過
複雜度應該是log(n)
2014-08-15 20:38:24
是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文