版权声明: https://blog.csdn.net/weixin_39792252/article/details/82083352
H Diff-prime Pairs
题目:找满足 ,都是prime的(i, j)对。
题解:如果,那么,这样就枚举,如果两个素数不相等,那么和一定满足都是素数,这样就是O(n)的复杂度啦。
代码:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn = 1e7+7;
int n;
bool vis[maxn];
ll ans[maxn];
void init()
{
memset(vis, 0, sizeof(vis));
memset(ans, 0, sizeof(ans));
for(int i = 2; i*i <= maxn; i++)
if(!vis[i])
for(int j = i*i; j <= maxn; j+= i)
vis[j] = true;
ll sum = 0;
for(int i = 2; i < maxn; i++) if(!vis[i]) ans[i] = 1;
for(int i = 2; i < maxn; i++) ans[i] += ans[i-1];
}
int main()
{
init();
while(~scanf("%d", &n))
{
ll sum = 0;
for(ll i = 1; i <= n; i++) sum += ans[n/i] * (ans[n/i] - 1);
printf("%lld\n", sum);
}
return 0;
}