トピック
説明
整数n(2 <= n <= 10000)を入力すると、1からこの整数(1とこの整数を除く)までのすべての素数を1桁で出力する必要があります。そうでない場合は-1を出力します。
入力
入力されたデータのセットは複数あります。
グループごとに1行、nを入力します。
出力
1からこの整数(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;
}