2017-01-25 14 views
-3

質問があります。私はこの割り当てを持っています。
与えられた正の整数Xの中にXが入っている最短区間[A、B]を見つけたいとします。また、AとBは素数です。範囲Primes C++

入力 入力の最初の行は、整数Mを(1 < = M < = 100)を含みます。 M行が続き、それぞれの番号はX (1 < X < = 10^5)です。 A及びB(1 < < = B^6 = 10 <)^ 4、B-< = 10を含む

出力 M行。

サンプル入力

サンプル出力

私はこれを行いましたが、これで問題は解決しません。 X番号の素数はどうやって印刷できますか?私に範囲がないならば。

#include <iostream> 
using namespace std; 

int main() 
{ 
    int n = 0, c = 0, c2 = 0, res = 0, nc = 0; 
    cout << "Introduce el limite de numeros: "; 
    cin >> n; 
    for (c = 1; c <= n; c++) { 
     for (c2 = 1; c2 <= n; c2++) { 
      res = c % c2; 
      if (res == 0) { 
       nc = nc + 1; 
      } 
     } 
     if (nc == 2) { 
      cout << " " << c; 
     } 
     nc = 0; 
    } 
} 
+1

「あなたには質問があります」と述べました。しかし、注意深い検査では、実際の質問が完全にないことが示されます。あなたの投稿に含まれる唯一のものは宿題のステータス更新です。それは具体的な質問ではありません。 –

+0

@SamVarshavchikまさに正しいことですが、MCVEリンクを追加することもできます:http://stackoverflow.com/help/mcve –

+0

IIRC [0、65536]の間に約6500個の素数があり、フルリスト。そのサイズの問題に対しては、任意の検索アルゴリズムが実現可能である。 – user3528438

答えて

0

さて、あなたは数字が素数である検索のための式を使用して、あなたのXの数と比較し、1を加算したり、コードがオンライン裁判官に対するものである場合(1

2

を休むことができますそれはちょうどエラトステネスのふるいを構築し、その後、最低> =与えられた数でプライムし、その後ルックス(探しバイナリ検索を実行し

#include <bits/stdc++.h> 

#define MAX 1000005 
#define endl '\n' 

using namespace std; 

bool prime[MAX]; 
vector<int> primes; 

void build() { 
    memset(prime, true, sizeof prime); 
    prime[0] = prime[1] = false; 

    for (int i = 2; i < MAX; ++i) { 
     if (!prime[i]) continue; 
     primes.push_back(i); 

     for (int j = i + i; j < MAX; j += i) { 
      prime[j] = false; 
     } 
    } 
} 

int main() { 
    ios_base::sync_with_stdio(false); 
    cin.tie(0); 

    build(); 

    int m; 
    cin >> m; 

    while (m--) { 
     int x; 
     cin >> x; 

     auto b = lower_bound(primes.begin(), primes.end(), x); 
     auto a = b; 

     if (*a != primes[0]) 
      a--; 

     cout << *a << " " << *b << endl; 
    } 

    return 0; 
} 

:あると思われるように)、あなたはこのような何かを試してみてくださいそれが前任者にとっては最小でない場合)。 xがその間隔に含まれます。もちろん、できるだけ小さい間隔であることに注意するのは簡単です。

+0

アルゴリズムクラスの宿題です。それは私が持っているより良い考えを私に与えてくれるのです。ありがとう –

+2

[Bertrand's Postulate](https://en.wikipedia.org/wiki/Bertrand's_postulate)は、nと2nの間に常に素数があることを示しています。これはあなたが構築しなければならないふるいのサイズの上限を与えます:sqrt(2 * 10^5)。 – rossum