题目1047:素数判定
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4800 解决:2241
题目描述:
给定一个数n,要求判断其是否为素数(0,1,负数都是非素数)。
输入:
测试数据有多组,每组输入一个数n。
输出:
对于每组输入,若是素数则输出yes,否则输入no。
样例输入:
13
样例输出:
yes
来源:
2009年哈尔滨工业大学计算机研究生机试真题
#include <iostream>#include <cmath>using namespace std;#define MAX 10000000bool is_prime[MAX];void f_prime(){//素数。指在一个大于1的自然数中,除了1和此整数自身外,没有其他因数。//最小的三个素数是 2 3 5//若程序超时 可适当调整MAXint tmp=sqrt(MAX);for(int i=2;i<MAX;i++)is_prime[i]=true;//初始化for(int i=2;i<MAX;i++){if(is_prime[i]==false)continue;if(i>=tmp) ///当i比较大时,i*i可能会溢出return;for(int j=i*i;j<MAX;j+=i)//直接从i*i考虑即可,如i=7,49-1=48 已由i=2时处理过is_prime[j]=false;}}int main( ){int n;f_prime();//相当于预处理咯while(cin>>n){if(n<=1)cout<<"no\n";else{if(is_prime[n])cout<<"yes\n";elsecout<<"no\n";}}return 0;}