这个告诉gcd的操作实际上就是告诉一个因数是否选,最坏情况是1,判断掉所有因数才能选 然后肯定是用猜不重复质数积比较划算,问题就变成若干个质数,分成数量尽量小每组乘积<=n的若干组 从大质数开始,贪心的选尽量多的小质数和他乘起来,原理是反正大质数都要分进一组,能多带流多带 #include<iostream> #include<cstdio> using namespace std; const int N=10005; int n,p[N],tot,ans; bool v[…
枚举小于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…