题目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 ;}