2是唯一一个偶数质数,其他的质数都是奇数
所以在中:
显然如果都是奇数质数,则为偶数,为奇数,则肯定不满足
所以中肯定其中一个为2
所以不妨令,然后枚举小于n的质数即可
总代码:
#include<bits/stdc++.h>
using namespace std;

#define endl '\n'
#define int long long
#define IOS ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define HelloWorld IOS;


const int N = 5e5 + 10;
int prime[N], idx;
bool vis[N];

signed main(){
    HelloWorld;
    
    int n; cin >> n;
    for(int i = 2; i <= n; i ++){
        if(!vis[i]) prime[++ idx] = i;
        for(int j = 1; prime[j] <= n / i; j ++){
            vis[prime[j] * i] = true;
            if(i % prime[j] == 0) break;
        }
    }    

    int ans = 0;
    for(int i = 1; i <= idx; i ++){
        int x = prime[i] + 2;
        int y = sqrt(x);
        if(y * y == x && !vis[y]){
            ans ++;
            if(prime[i] != 2) ans ++;
        }
    }
    cout << ans << endl;
    return 0;
}