2022-12-12

【ZeroJudge】a007 判斷質數 解法分享

點擊前往題目👉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恐無法登入留言(只能以匿名方式留言)!

敬請詳細描述問題,以方便站方迅速判斷與解答!

依據本站免責聲明,本站得逕行刪除含有不適合存在於本站的言論與字詞的發言,敬請謹慎留言!