【UVa11426】GCD - Extreme (II)(莫比乌斯反演)

【UVa11426】GCD - Extreme (II)(莫比乌斯反演)

题面

Vjudge

题解

这。。
直接套路的莫比乌斯反演
我连式子都不想写了
默认推到这里把。。
然后把\(ans\)写一下
\[ans=\sum_{d=1}^nd\sum_{i=1}^{n/d}\mu(i)[\frac{n}{id}]^2\]
令\(T=id\)
然后把\(T\)提出来
\[ans=\sum_{T=1}^n[\frac{n}{T}]^2\sum_{d|T}d\mu(\frac{T}{d})\]
后面那一堆东西直接线性筛
前面数论分块
单次询问复杂度\(O(\sqrt n)\)
最后别忘记题目求的是什么

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<queue>
using namespace std;
#define MAX 4000000
inline int read()
{
    int x=0,t=1;char ch=getchar();
    while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
    if(ch=='-')t=-1,ch=getchar();
    while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
    return x*t;
}
bool zs[MAX+10];
int pri[MAX+10],tot;
long long s[MAX+10];
void pre()
{
    zs[1]=true;s[1]=1;
    for(int i=2;i<=MAX;++i)
    {
        if(!zs[i])pri[++tot]=i,s[i]=i-1;
        for(int j=1;j<=tot&&i*pri[j]<=MAX;++j)
        {
            zs[i*pri[j]]=true;
            if(i%pri[j])s[i*pri[j]]=s[i]*s[pri[j]];
            else{s[i*pri[j]]=s[i]*pri[j];break;}
        }
    }
    for(int i=1;i<=MAX;++i)s[i]+=s[i-1];
}
int main()
{
    pre();
    while(233)
    {
        int n=read();
        if(!n)break;
        int i=1,j;
        long long ans=-1ll*n*(n+1)/2;
        while(i<=n)
        {
            j=n/(n/i);
            ans+=1ll*(n/i)*(n/i)*(s[j]-s[i-1]);
            i=j+1;
        }
        printf("%lld\n",ans/2);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/cjyyb/p/8284639.html

时间: 2024-10-15 02:57:10

【UVa11426】GCD - Extreme (II)(莫比乌斯反演)的相关文章

UVa11426 GCD - Extreme (II)

见http://www.cnblogs.com/SilverNebula/p/6280370.html II的数据范围是I的20倍. 但是做I时用的O(n)+O(nlogn)+O(n)的算法足够了. 没错我就是在水博 /*by SilverN*/ #include<iostream> #include<algorithm> #include<cstring> #include<cstdio> #include<cmath> using names

UVA11426 GCD - Extreme (II)---欧拉函数的运用

题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=473&problem=2421&mosmsg=Submission+received+with+ID+13800900 Given the value of N, you will have to ?nd the value of G. The de?nition

UVA 11426 - GCD - Extreme (II) (数论)

UVA 11426 - GCD - Extreme (II) 题目链接 题意:给定N,求∑i<=ni=1∑j<nj=1gcd(i,j)的值. 思路:lrj白书上的例题,设f(n) = gcd(1, n) + gcd(2, n) + ... + gcd(n - 1, n).这样的话,就可以得到递推式S(n) = f(2) + f(3) + ... + f(n) ==> S(n) = S(n - 1) + f(n);. 这样问题变成如何求f(n).设g(n, i),表示满足gcd(x, n)

bnu——GCD SUM (莫比乌斯反演)

题目:GCD SUM 题目链接:http://www.bnuoj.com/v3/problem_show.php?pid=39872 算法:莫比乌斯反演.优化 1 #include<stdio.h> 2 #define N 100001 3 typedef long long LL; 4 bool pri[N]={0}; 5 int prim[N],po=0; 6 int mu[N]; 7 LL f[N],ff[N]; //缩短时间 8 /* 9 莫比乌斯函数mu[i]的定义: 10 1. 如

【Project Euler】530 GCD of Divisors 莫比乌斯反演

[题目]GCD of Divisors [题意]给定f(n)=Σd|n gcd(d,n/d)的前缀和F(n),n=10^15. [算法]莫比乌斯反演 [题解]参考:任之洲数论函数.pdf 这个范围显然杜教筛也是做不了的,而且考虑直接化简f(n)也遇到了困难,所以考虑将前缀和的Σ一起化简. $$F(n)=\sum_{i=1}^{n}\sum_{d|i}(d,\frac{i}{d})$$ 这一步很常见的是第一重改为枚举倍数,但这样化简后面就推不下去了. 这道题必须最后转成$\sigma_0(n)$才

GCD - Extreme (II)(UVA11426)

思路:欧拉函数: 欧拉函数,然后用下等差数列公式就行了. 1 #include<stdio.h> 2 #include<algorithm> 3 #include<iostream> 4 #include<queue> 5 #include<math.h> 6 #include<vector> 7 #include<bitset> 8 using namespace std; 9 typedef long long LL;

51nod 1594 Gcd and Phi(莫比乌斯反演)

题目链接 传送门 思路 如果这题是这样的: \[ F(n)=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}\phi(gcd(i,j)) \] 那么我们可能会想到下面方法进行反演: \[ \begin{aligned} F(n)=&\sum\limits_{k=1}^{n}\phi(k)\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}[gcd(i,j)=k]&\=&\sum\limits_{k=1}^{n}\p

UVA 11426 GCD - Extreme (II) (数论|欧拉函数)

题意:求sum(gcd(i,j),1<=i<j<=n). 思路:首先可以看出可以递推求出ans[n],因为ans[n-1]+f(n),其中f(n)表示小于n的数与n的gcd之和 问题转化为了求f(n),因为小于n的数与n的gcd一定是n的因数, 所以f(n)可以表示为sum(i)*i,其中sum(i)表示所有和n的gcd为i的数的数量,我们要求满足gcd(a, n) = i,的个数,可以转化为求gcd(a/i, n/i) = 1的个数, 于是可以发现sun(i) = phi(n/i),这

USACO GCD Extreme(II)

题目大意:求gcd(1,2)+gcd(1,3)+gcd(2,3)+...+gcd(n-1,n) ----------------------------------------------------------------- 设f(i)=gcd(1,n)+...+gcd(n-1,n),则答案S(n)=f(2)+...+f(n) 如何求f 设g(n,i)表示满足gcd(x,n)=1且x<n的x个数,则f(n)=sum{i*g(n,i):i|n} gcd(x,n)=i的充要条件是x/i和n/i互质