洛谷 P2257 YY的GCD

题目地址:https://www.luogu.org/problemnew/show/P2257
参考了大佬的思路:https://www.luogu.org/blog/peng-ym/solution-p2257
可以结合我的hdu1695题解看一下,这道题是1695的加强版 ,原文地址:https://blog.csdn.net/xiaoshazheng/article/details/85712803
本题算法是莫比乌斯反演感觉推的过程有点多,我就直接上手写版了
洛谷 P2257 YY的GCD_第1张图片
洛谷 P2257 YY的GCD_第2张图片
过程感觉写的比较详细,有什么没写清楚的可以在评论里问我。
附代码:

#include 
#include 
#include 
#include 
#define  maxn 10000100
using namespace std;
int prime[maxn],cnt,mo[maxn],x[maxn];
long long sum[maxn];
bool f[maxn];
void data()
{
    cnt=0;
    memset(f,true,sizeof(f));
     memset(x,0,sizeof(x));
     sum[0]=0;
    f[0]=f[1]=false;
    mo[1]=1;
    for(int i=2;i<=maxn;i++)
    {
        if(f[i])
        {
            prime[cnt++]=i;
            mo[i]=-1;
        }
        for(int j=0;j

发现了一个可怕的点,第62行必须要加(long long)转化,不加就只能50分,而且把(long long)换成111*也能过,而且还是数字1.笑哭笑哭笑哭笑哭笑哭笑哭笑哭笑哭笑哭笑哭笑哭笑哭笑哭笑哭

你可能感兴趣的:(洛谷)