アルゴリズムノートCodeUp問題A:プライムナンバー

トピック

説明

整数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;
}

おすすめ

転載: blog.csdn.net/Cindy_00/article/details/108694246