點擊前往題目👉a007
我的解法
#include <iostream>
#include <cmath>
using namespace std;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int g[5000],t=0,root; //g[5000]存放2到2147483647的質數
bool b=1;
root=sqrt(2147483647);
for(int i=2;i<=root;i++){
b=1;
for(int j=2;j<=sqrt(i);j++){
if(i%j==0){
b=0;
break;
}
}
if(b) g[t++]=i;//建表
}
int n;
while(cin>>n){
b=1;
for(int i=0;i<t;i++){
int sq=sqrt(n);
if(sq<g[i]) break;
if(n%g[i]==0){
b=0;
break;
}
}
if(b) cout<<"質數"<<endl;
else cout<<"非質數"<<endl;
}
return 0;
}
解析
在這題我們會需要使用到cmath函式庫,所以請記得
#include <cmath>
這樣我們才能在後面使用到相應的函數。
tips:這裡請不要使用
#include <bits/stdc++.h>
容易TLE
ios_base::sync_with_stdio(0);
cin.tie(0);
這段是I/O優化,你可以到這裡查看詳情。
int g[5000],t=0,root; //g[5000]存放2到2147483647的質數
bool b=1;
root=sqrt(2147483647);
for(int i=2;i<=root;i++){
b=1;
for(int j=2;j<=sqrt(i);j++){
if(i%j==0){
b=0;
break;
}
}
if(b) g[t++]=i;//建表
}
上面這段旨在建立「質數表」。
沒有留言:
張貼留言
留言注意事項:
◎ 勾選「通知我」可在後續有回覆時寄信給您!
◎ 使用Safari恐無法登入留言(只能以匿名方式留言)!
◎ 敬請詳細描述問題,以方便站方迅速判斷與解答!
◎ 依據本站免責聲明,本站得逕行刪除含有不適合存在於本站的言論與字詞的發言,敬請謹慎留言!