51nod 1040 最大公约数之和(容斥思想)
来源:互联网 发布:mac os x系统镜像下载 编辑:程序博客网 时间:2024/05/22 04:27
1个数N(N <= 10^9)
公约数之和
6
15
题意很简单。
思路:你可以确定的是1到n这些数字与n的gcd一定是n的约数,那么n的约数,你先枚举出来。
假如是n=20,那么20的约数有:1,2,4,5,10,20;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 (i)
1 2 1 4 5 2 1 4 1 10 1 4 1 2 5 4 1 2 1 20 (gcd)
这些数字可以按照gcd的值进行分类。
1,2,4,5,10,20(及按约数分类,这一类有(20/约数)个)
1 2 4 5 10 20 (与20的gcd的剩余值)(剩余值:前面计算过的贡献就减去,留下剩余的gcd)
我先算约数为1的哪一类,有哪些数字与20的gcd是1的倍数,就有20/1个数字,所以20/1*1及为约数1的贡献值,
因为1算的是1-20中所有的数字都算了1,所有数字的gcd剩余值都要减去1,因为我已经把gcd分了类,所以只需要把这一类的gcd减去1即可,
及
1,2,4,5,10,20(及按约数分类)
1 1 3 4 9 19 (与20的gcd的剩余值)因为一部分1已经算过了,所以其他的gcd剩余要算的值都减去1
然后算约数为2的贡献,有10个数字gcd是包含2的(如2,4,6,8,...20,那么约数若是2的倍数,那么就要减去2计算过的gcd),20/2*1,这个是2的贡献
1,2,4,5,10,20(及按约数分类)
1 1 2 4 8 18(与20的gcd的剩余值)(4,10,20这几个约数是2的倍数所以gcd剩余值要减去1(这个1是2与20剩余的gcd))
然后算约数为4的贡献,有20/4个数字gcd是包含4的,20/4*2,这个是4的贡献
1,2,4,5,10,20(及按约数分类)
1 1 2 4 8 16(与20的gcd的剩余值)(20这个约数是4的倍数所以gcd剩余值要减去2)
1,2,4,5,10,20(及按约数分类)
1 1 2 4 4 12(与20的gcd的剩余值)
1,2,4,5,10,20(及按约数分类)
1 1 2 4 4 8(与20的gcd的剩余值)
答案为20/1*1+20/2*1+20/4*2+20/5*4+20/10*4+20/20*8=72#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<queue>#include<string>#include<algorithm>#define inf 0x3f3f3f3f#define LL long longusing namespace std;int s[100001],ls=0;//存约数int k[100001];//gcd剩余值int main(){ int n; scanf("%d",&n); for(int i=1;i*i<=n;i++) { if(n%i) continue; s[ls++]=i; if(i*i!=n) s[ls++]=n/i; } sort(s,s+ls); for(int i=0;i<ls;i++) k[i]=s[i]; LL sum=0; for(int i=0;i<ls;i++) { sum+=(LL)k[i]*n/s[i]; for(int j=i+1;j<ls;j++) { if(s[j]%s[i]) continue; k[j]-=k[i]; } } printf("%I64d\n",sum);}
- 51nod 1040 最大公约数之和(容斥思想)
- 51nod 1040 最大公约数之和 (数学)
- 51nod 1040:最大公约数之和
- [51nod]1040 最大公约数之和
- 【51Nod 1040】最大公约数之和
- 【51Nod 1040】最大公约数之和
- 51Nod-1040-最大公约数之和
- 51nod 1040 最大公约数之和
- 【51Nod 1040】 最大公约数之和
- 51nod-1040 最大公约数之和
- 51nod 1040 最大公约数之和
- 51nod 1040 最大公约数之和
- 51Nod 1040 最大公约数之和
- 51nod-1040-最大公约数之和(欧拉函数)
- 51nod 1040 最大公约数之和(欧拉)
- 51NOD 1040 最大公约数之和(欧拉函数 + 转化)
- 51nod 1040 最大公约数之和(欧拉函数)
- 51nod-1040-1040 最大公约数之和(欧拉函数)
- “http://hao643.com/?r=wwwww&m=c166” 类似这样的恶意链接去除方法
- 2016 CCF大数据与计算智能大赛 开源资料整理
- druid数据库连接池
- yii2.0如何使用ActionForm
- windows 安装Python的networkx
- 51nod 1040 最大公约数之和(容斥思想)
- 详解java mail 发送邮件
- Tcp方式采集CNC兄弟设备数据
- linux cat命令的<<EOF
- yii2下使用自带类发送邮件
- springboot(1):入门篇
- 用fread()和fwrite()读写文件
- [zabbix/使用API进行批量创建screen(聚合图形)]
- js-----初步了解变量 作用域