题目描述 给定整数,求且为素数的数对有多少对. 分析 首先筛出所有的素数. 我们考虑枚举素数p,统计满足的个数,等价于统计的个数,即统计以内满足互质的有序数对个数. 不难发现,也就是说,我们只要预处理出欧拉函数,就可以在之内求出. 我们只需要用线性筛预处理出素数和欧拉函数,然后求,就可以在内解决问题. 代码 #include <cstdio> typedef long long lint; const int N=10000010; int n; int vis[N]; int pri[N];…
枚举小于n的质数,然后再枚举小于n/这个质数的Φ的和,乘2再加1即可.乘2是因为xy互换是另一组解,加1是x==y==1时的一组解.至于求和我们只需处理前缀和就可以啦,注意Φ(1)的值不能包含在前缀和里,因为这样就会把x==y==1的情况算2次了,,,貌似包含后只要乘2再减1就可以了 #include<cstdio> using namespace std; const int N=10000003; int num=0,prime[N],phi[N]; long long sum[N]; b…