题目描述
一个大于1的自然数,如果除了1和它自身外,不能被其他自然数整除则称该数为质数。
例如7就是一个质数,因为它只能被1和7整除。
现在,给定你N个大于1的自然数,请你依次判断这些数是否是质数。
样例
输入格式
第一行包含整数N,表示共有N个测试数据。
接下来N行,每行包含一个自然数X。
输出格式
每个测试用例输出一个结果,每个结果占一行。
如果测试数据是质数,则输出“X is prime”,其中X是测试数据。
如果测试数据不是质数,则输出“X is not prime”,其中X是测试数据。
数据范围
1≤N≤100,
1<X≤107
输入样例:
3
8
51
7
输出样例:
8 is not prime
51 is not prime
7 is prime
算法1
(暴力枚举) $O(n^2)$
C++ 代码
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int n;
cin>>n;
while(n--){
int x;
cin>>x;
bool is_prime=true;
for(int i=2;i<x;i++){
if(x%i==0){
is_prime=false;
break;
}
}
if(is_prime) printf("%d is prime\n",x);
else printf("%d is not prime\n",x);
}
return 0;
}
算法2
优化后,不超时
参考文献
C++ 代码
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int n;
cin>>n;
while(n--){
int x;
cin>>x;
bool is_prime=true;
for(int i=2;i*i<=x;i++){
if(x%i==0){
is_prime=false;
break;
}
}
if(is_prime) printf("%d is prime\n",x);
else printf("%d is not prime\n",x);
}
return 0;
}