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;
}



京公网安备 11010502036488号