1. 程式人生 > >九度OJ-題目1163:素數

九度OJ-題目1163:素數

題目描述:

輸入一個整數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; }