九度OJ-題目1163:素數
阿新 • • 發佈:2019-02-04
題目描述:
輸入一個整數n(2<=n<=10000),要求輸出所有從1到這個整數之間(不包括1和這個整數)個位為1的素數,如果沒有則輸出-1。
輸入:
輸入有多組資料。
每組一行,輸入n。
輸出:
輸出所有從1到這個整數之間(不包括1和這個整數)個位為1的素數(素數之間用空格隔開,最後一個素數後面沒有空格),如果沒有則輸出-1。
樣例輸入:
100
樣例輸出:
11 31 41 61 71
來源:
2008年北京航空航天大學計算機研究生機試真題
思路
因為有多組輸入,我用的打表法。
注意:邊界條件——(不包括1和這個整數)、注意輸入格式(最後一個素數後面沒空格)——設bool first變數
AC程式碼
#include<bits/stdc++.h>
using namespace std;
#define maxn 10005
bool vis[maxn];
int prime[maxn];
int tot = 0;
/*
素數打表
*/
void init(){
for(int i = 2;i < maxn;i++){
if(!vis[i]){
prime[tot++] = i;
}
for(int j = i;j < maxn;j+=i){
vis[j] = true ;
}
}
}
int main(){
init();
bool first = true;
int n;
while(~scanf("%d",&n)){
first = true;
for(int i = 0;i < tot;i++){
if(prime[i] >= n){
break;
}
if(prime[i]%10 == 1){
if(first){
cout << prime[i];
first = false;
}else{
cout << " " << prime[i];
}
}
}
if(first){
cout << "-1";
}
cout << endl;
}
return 0;
}