题目
Description
输入一个整数n(2<=n<=10000),要求输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数,如果没有则输出-1。
Input
输入有多组数据。
每组一行,输入n。
Output
输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数(素数之间用空格隔开,最后一个素数后面没有空格),如果没有则输出-1。
思路
由于n<=10000,所以可以考虑先打素数表再输出
注意:如果没有素数(也就是说n<=11)则输出-1
代码
#include <iostream>
#include <stdio.h>
#include <vector>
#include <math.h>
using namespace std;
vector<int> primes;
bool isPrime(int n){
int sqr=sqrt(1.0*n);
for(int i=2;i<=sqr;i++)
if(n%i==0)
return false;
return true;
}
void FindPrime(){
for(int i=11;i<10000;i+=10)//注意只需要个位为1的素数
if(isPrime(i))
primes.push_back(i);
}
int main(){
int n;
FindPrime();
while(scanf("%d",&n)!=EOF){
if(n<=11){
printf("%d\n",-1);
continue;
}
for(int i=0;primes[i]<n&&i<=305;i++){
if(primes[i+1]>=n||i==305)//注意最后一个素数后面没有空格
printf("%d",primes[i]);
else
printf("%d ",primes[i]);
}
printf("\n");
}
return 0;
}