在給定 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
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP