在給定 C++ 範圍中的質數之間最大差值的查詢


在本問題中,我們給出了 Q 個查詢,其中包含兩個值 L 和 R。我們的任務是建立一個程式來解決 C++ 中給定範圍內的質數之間最大差值的查詢。

問題描述:在這裡,在每個查詢中給出了兩個值 L 和 R。我們必須找出最大差值,即給定範圍內的最大質數和最小質數之間的差值。

我們舉個例子來理解這個問題,

輸入

Q = 2
2 45
14 16
41 0

輸出

解釋

對於查詢 1,給定範圍內的最小質數是 2,最大質數是 43。差值 43 - 2 = 41。

對於查詢 2,給定範圍內的質數不存在,因此輸出為 0。

解決方案方法,

To solve the problem, we will create an array of prime numbers till 100005
which is the given range. Then, we will find the first prime number which is
greater than L and the first prime number which is smaller than R . and find
their difference.

說明我們解決方案的工作原理的程式,

範例

 即時演示

#include <bits/stdc++.h>
using namespace std;

bool primeNumber[100005] ;

void findPrimes(){
   memset(primeNumber, true, sizeof(primeNumber));
   for (int i = 2; i * i < 100005; i++) {
      if (primeNumber[i]) {
         for (int j = i + i; j < 100005; j += i)
         primeNumber[j] = false;
      }
   }
}

int findPrimeInRange(int L, int R) {

   int LPrime = 0;
   int RPrime = 0;
   for(int i = L; i <= R; i++){
      if(primeNumber[i] == true){
         LPrime = i;
         break;
      }
   }
   for(int j = R; j >= L; j--){
      if(primeNumber[j] == true){
         RPrime = j;
         break;
      }
   }
   return (RPrime - LPrime);
}

int main() {
   int Q = 3;
   int query[Q][2] = {{4, 15}, {32, 37}, {54, 1100}};
   findPrimes();
   for (int i = 0; i < Q; i++)
   cout<<"For query "<<(i+1)<<": The maximum difference between primes numbers is "<<findPrimeInRange(query[i][0], query[i][1])<<"\n";
   return 0;
}

輸出

For query 1: The maximum difference between primes numbers is 8
For query 2: The maximum difference between primes numbers is 0
For query 3: The maximum difference between primes numbers is 1038

更新時間: 2020 年 9 月 9 日

354 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.