Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

บาลานซ์ไพรม์ใน C++


ไพรม์สมดุล number คือจำนวนเฉพาะที่มีความแตกต่างเท่ากันสำหรับจำนวนเฉพาะก่อนหน้าและถัดไป นั่นคือ เป็นค่าเฉลี่ยของจำนวนเฉพาะตัวถัดไปและจำนวนเฉพาะก่อนหน้าที่ใกล้เคียงที่สุด

สำหรับจำนวนเฉพาะที่จะเป็นจำนวนเฉพาะแบบสมดุล ควรทำตามสูตรต่อไปนี้ −

n =(P(n-1) + P(n+1)) / 2

โดยที่ n คือดัชนีของจำนวนเฉพาะ pn ในชุดลำดับของจำนวนเฉพาะ

ชุดลำดับของจำนวนเฉพาะ:2, 3, 5, 7, 11, 13,….

อันดับแรก ไพรม์ที่สมดุลคือ 5, 53, 157, 173 , …

ในปัญหานี้ เราได้รับตัวเลข n และเราต้องหาจำนวนเฉพาะที่สมดุลที่ n

มาดูตัวอย่างกัน

Input : n = 3
Output : 157

สำหรับสิ่งนี้จะสร้างจำนวนเฉพาะและเก็บไว้ในอาร์เรย์ เราจะพบว่าจำนวนเฉพาะเป็นจำนวนเฉพาะที่สมดุลหรือไม่ ถ้ามันเพิ่มจำนวนและถ้านับเท่ากับ n ให้พิมพ์

ตัวอย่าง

#include<bits/stdc++.h>
#define MAX 501
using namespace std;
int balancedprimenumber(int n){
   bool prime[MAX+1];
   memset(prime, true, sizeof(prime));
   for (int p = 2; p*p <= MAX; p++){
      if (prime[p] == true)
      {
         for (int i = p*2; i <= MAX; i += p)
         prime[i] = false;
      }
   }
   vector<int> v;
   for (int p = 3; p <= MAX; p += 2)
   if (prime[p])
   v.push_back(p);
   int count = 0;
   for (int i = 1; i < v.size(); i++){
      if (v[i] == (v[i+1] + v[i - 1])/2)
      count++;
      if (count == n)
      return v[i];
   }
}
int main(){
   int n = 3;
   cout<<balancedprimenumber(n)<<endl;
   return 0;
}

ผลลัพธ์

157