九度OJ 题目1163:素数
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2782 解决:761
http://ac.jobdu.com/problem.php?pid=1163
题目描述:
输入一个整数n(2<=n<=10000),要求输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数,如果没有则输出-1。
输入:
输入有多组数据。
每组一行,输入n。
输出:
输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数(素数之间用空格隔开,最后一个素数后面没有空格),如果没有则输出-1。
样例输入:
100
样例输出:
11 31 41 61 71
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2782 解决:761
http://ac.jobdu.com/problem.php?pid=1163
题目描述:
输入一个整数n(2<=n<=10000),要求输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数,如果没有则输出-1。
输入:
输入有多组数据。
每组一行,输入n。
输出:
输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数(素数之间用空格隔开,最后一个素数后面没有空格),如果没有则输出-1。
样例输入:
100
样例输出:
11 31 41 61 71
#include <memory.h>
#include <iostream>
using namespace std;
int prime[320];
bool isPrime[10005];
int primeNumber( int n ){
memset( isPrime, 0, sizeof(isPrime) );
int d = 100;
int i, j;
for( i=2; i<6; i++ ){ //2,3,5
if( i%4 == 0 ) continue;
for( j=i*i; j<n; j+=i )
isPrime[j] = 1; //true表示非素数
}
for( i=7; i<=d; i+=2 ){
if( i % 3 == 0 ) continue;
if( i % 5 == 0 ) continue;
for( j=i*i; j<n; j+=i )
isPrime[j] = 1; //1表示非素数
}
for( i=2, j=0; i<n; i++ )
if( !isPrime[i] && i%10 == 1 )
prime[j++] = i;
return j;
}
int main(){
int i, j, k, l, m, n;
l = primeNumber( 10000 );
// cout << endl << "l = " << l << endl;
// cout << prime[l-1] << endl;
while( cin >> n ){
i = 0;
bool flag = 0;
while(prime[i]<n && i<l){
if( flag ) cout << " " << prime[i++];
else{
cout << prime[i++];
flag =