Untitled
unknown
c_cpp
3 years ago
824 B
5
Indexable
#include<stdio.h> #include<cmath> #include<string.h> #include<vector> using namespace std; const int sqrtMax = 65537; bool primeTable[sqrtMax+1]; vector<int > prime; void init(){ memset(primeTable,true,sizeof(primeTable)); primeTable[0]=false; primeTable[1]=false; for(int i=2; i<=sqrtMax; i++){ if(primeTable[i] == true){ prime.push_back(i); for(int j=i*2; j<=sqrtMax; j+=i){ primeTable[j] = false; } } } return; } bool isPrime(int num){ if(num <= sqrtMax){ return primeTable[num]; } else{ int sqrtNum=sqrt(num); for(int i=0; i<prime.size() && prime[i]<=sqrtNum ; i++){ if(num%prime[i]==0){ return false; } } return true; } } int main(){ init(); int n; while(scanf("%d",&n)!=EOF){ if(isPrime(n)){ printf("質數\n"); } else{ printf("非質數\n"); } } }
Editor is loading...