UVA11426 GCD - Extreme (II) (欧拉函数/莫比乌斯反演)
UVA11426 GCD - Extreme (II)
题目描述
输入输出格式
输入格式:
输出格式:
输入输出样例
输入样例#1:
10
100
200000
0
输出样例#1:
67
13015
143295493160
Solution
这道题我用莫比乌斯反演和欧拉函数都写了一遍,发现欧拉函数比莫比乌斯反演优秀?
求所有\(gcd=k\)的数对的个数,记作\(f[k],ans=\sum_{i=1}^{n}(f[i]-1)\),为什么还要-1,我们注意到\(j=i+1\),自己与自己是不算的,再乘上这个数的大小\(k\)就可以了
我们发现要求\(\sum_{i=1}^{n-1}\sum_{j=i+1}^{n}{gcd(i,j)}\),我们令\(gcd(i,j)=k\),则必有\(gcd(a\times k,b\times k)=k\to gcd(a,b)=1\),我们枚举这两个数中大的那个,另一个数就有\(phi[i](1<=i <=n/k)\)个,所以\(f[n]=\sum_{i=1}^{n/k}\phi(i)\)
筛一下欧拉函数求前缀和就可以了
那么?莫比乌斯反演怎么写呢?
\(ans=\sum_{i=1}^{n-1}\sum_{j=i+1}^{n}gcd(i,j)\)
\(ans=\sum_{i=1}^{n}\sum_{j=1}^{n}gcd(i,j)\)
我么观察这两个式子的区别,一个是从j从1开始,另一个是从i+1开始,这两个式子是具有几何意义的,上面的式子求得是一个三角形的答案(且不包括对角线),下面的是矩形.那么我们用下面的式子-对角线上的答案再除以2就是上面的答案了
(对角线上的答案就是\(gcd(i,i)=i\),所以一个等比数列求和就好了)
下面的式子很好反演,套路套路....
\]
\]
线性筛莫比乌斯函数,然后套个整除分块就好了(还是没有第一种方法快,如果莫比乌斯反演有比博主还快的方法,请告知我)
Code1
#include<bits/stdc++.h>
#define lol long long
#define il inline
#define rg register
#define Min(a,b) (a)<(b)?(a):(b)
#define Max(a,b) (a)>(b)?(a):(b)
#define NN 4000000
using namespace std;
const int N=4e6+10;
int n,tot;
lol phi[N],prime[N];
bool vis[N];
il void init() {
phi[1]=1;
for(rg int i=2;i<=NN;i++) {
if(!vis[i]) prime[++tot]=i,phi[i]=i-1;
for(rg int j=1;j<=tot && i*prime[j]<=NN;j++) {
vis[i*prime[j]]=1;
if(i%prime[j]==0) {
phi[i*prime[j]]=phi[i]*prime[j];
}
else phi[i*prime[j]]=phi[i]*(prime[j]-1);
}
}
for(rg int i=1;i<=NN;i++) phi[i]+=phi[i-1];
}
int main()
{
ios::sync_with_stdio(0);
init();
while(cin>>n) {
lol ans=0;
if(n==0) break;
for(rg int i=1;i<=n;i++) ans+=1ll*(phi[n/i]-1)*i;
cout<<ans<<endl;
}
}
Code2
#include<bits/stdc++.h>
#define in(i) (i=read())
#define il extern inline
#define rg register
#define mid ((l+r)>>1)
#define ll(x) (x<<1)
#define rr(x) (x<<1|1)
#define Min(a,b) ((a)<(b)?(a):(b))
#define Max(a,b) ((a)>(b)?(a):(b))
#define lol __int128
using namespace std;
const lol N=4e6+10;
lol read() {
lol ans=0, f=1; char i=getchar();
while (i<'0' || i>'9') {if(i=='-') f=-1; i=getchar();}
while (i>='0' && i<='9') ans=(ans<<1)+(ans<<3)+(i^48), i=getchar();
return ans*f;
}
lol cnt;
lol vis[N]={0,1},prime[N],mu[N]={0,1};
void init() {
for (lol i=2;i<=N-10;i++) {
if(!vis[i]) prime[++cnt]=i,mu[i]=-1;
for (lol j=1;j<=cnt && prime[j]*i<=N-10;j++) {
vis[i*prime[j]]=1;
if(i%prime[j]==0) break;
mu[i*prime[j]]=-mu[i];
}
}for (lol i=1;i<=N-10;i++) mu[i]+=mu[i-1];
}
lol work(lol d,lol n,lol ans=0) {
n/=d;
for (lol l=1,r;l<=n;l=r+1) {
r=n/(n/l);
ans+=(mu[r]-mu[l-1])*(n/l)*(n/l);
}return ans;
}
int main()
{
long long ans,n; init();
while(scanf("%lld",&n)==1 && n) {
ans=0;
for (lol i=1;i<=n;i++) ans+=i*work(i,n);
printf("%lld\n",(ans-(n+1)*n/2)/2);
}
return 0;
}
UVA11426 GCD - Extreme (II) (欧拉函数/莫比乌斯反演)的更多相关文章
- UVA11426 GCD - Extreme (II) —— 欧拉函数
题目链接:https://vjudge.net/problem/UVA-11426 题意: 求 ∑ gcd(i,j),其中 1<=i<j<=n . 题解:1. 欧拉函数的定义:满足 ...
- UVA11426 GCD - Extreme (II)---欧拉函数的运用
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVA 11426 GCD - Extreme (II) (欧拉函数+筛法)
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=70017#problem/O 题意是给你n,求所有gcd(i , j)的和,其中 ...
- UVA 11426 GCD - Extreme (II)(欧拉函数打表 + 规律)
Given the value of N, you will have to find the value of G. The definition of G is given below:Here ...
- uva 11426 GCD - Extreme (II) (欧拉函数打表)
题意:给一个N,和公式 求G(N). 分析:设F(N)= gcd(1,N)+gcd(2,N)+...gcd(N-1,N).则 G(N ) = G(N-1) + F(N). 设满足gcd(x,N) 值为 ...
- UVA 11426 - GCD - Extreme (II) 欧拉函数-数学
Given the value of N, you will have to find the value of G. The definition of G is given below:G =i< ...
- UVA 11426 GCD - Extreme (II) 欧拉函数
分析:枚举每个数的贡献,欧拉函数筛法 #include <cstdio> #include <iostream> #include <ctime> #include ...
- UVA 11424 GCD - Extreme (I) (欧拉函数+筛法)
题目:给出n,求gcd(1,2)+gcd(1,3)+gcd(2,3)+gcd(1,4)+gcd(2,4)+gcd(3,4)+...+gcd(1,n)+gcd(2,n)+...+gcd(n-1,n) 此 ...
- GCD - Extreme(欧拉函数变形)
题目链接:https://vjudge.net/problem/UVA-11426 题目大意: 给出整数n∈[2,4000000],求解∑gcd(i,j),其中(i,j)满足1≤i<j≤n. 的 ...
随机推荐
- Oracle集合
--union 并集 select * from emp where ename like '%A%' union select * from emp where ename like '%M%'; ...
- windows8和windows server2012不联网安装.net 3.5(包括2.0和3.0)
安装完win8后 发现系统默认没有安装.net3.5 如果使用在线更新的话需要很久才能完成,特别是当前的网速以及微软的服务器.速度很忙,其实我们利用win8的安装盘就可以不需要联网更新,而且几分钟就搞 ...
- tomcat 最大并发连接数设置
转自: http://blog.csdn.net/qysh123/article/details/11678903 这是个很简单的问题,但是搜了一圈,发现大家都写错了.所以这里总结一下: 几乎所有的中 ...
- USACO 3.3.1 Riding the Fences 骑马修栅栏(欧拉回路)
Description 农民John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经过一个一个栅栏.你必须编一个程 ...
- Scrum立会报告+燃尽图(十月十九日总第十次):
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2246 项目地址:https://git.coding.net/zhang ...
- “Hello World!”团队——Final发布用户使用报告
博客内容: 1.用户体验报告表 2.用户评论截图 3.总结 一.用户体验报告表 用户使用报告 用户类别 用户姓名(化名) 性别 用户职业 使用频次 用户评论 新增用户 小小静 女 中学信息技术老师 8 ...
- 我是IT小小鸟(读后感)
序 1.兴趣,这本书第一个点讲兴趣,可是在中国填鸭式的教育下,有兴趣也被这种教育给泯灭了. 2.他山之石,可以攻玉.但不可照搬.这点我非常赞同作者的看法.别人东西你拿来,一定要在他的基础上进行创 ...
- lintcode-248-统计比给定整数小的数的个数
248-统计比给定整数小的数的个数 给定一个整数数组 (下标由 0 到 n-1,其中 n 表示数组的规模,数值范围由 0 到 10000),以及一个 查询列表.对于每一个查询,将会给你一个整数,请你返 ...
- Maven基本理解
转 maven(一) maven到底是个啥玩意~ 我记得在搞懂maven之前看了几次重复的maven的教学视频.不知道是自己悟性太低还是怎么滴,就是搞不清楚,现在弄清楚了,基本上入门了.写该篇博文,就 ...
- beta-review阶段贡献分分配
小组名称:飞天小女警 项目名称:礼物挑选小工具 小组成员:沈柏杉(组长).程媛媛.杨钰宁.谭力铭 bera-review阶段各组员的贡献分分配如下: 姓名 团队贡献分 程媛媛 5.8 沈柏杉 6.1 ...