Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 균형 프라임

<시간/>

균형 소수 number는 이전 소수와 다음 소수의 차이가 같은 소수입니다. 즉, 가장 가까운 다음 소수와 이전 소수의 평균입니다.

소수가 균형 소수가 되려면 다음 공식을 따라야 합니다. -

Pn =(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