Luogu1390 公约数的和
原题链接:https://www.luogu.org/problemnew/show/P1390
公约数的和
题目描述
有一天,TIBBAR和LXL比赛谁先算出1~N这N个数中每任意两个不同的数的最大公约数的和。LXL还在敲一个复杂而冗长的程序,争取能在100s内出解。而TIBBAR则直接想1s秒过而获得完胜,请你帮他完成这个任务。
输入输出格式
输入格式:
共一行,一个正整数N。
输出格式:
共一行,一个数,为1~N这N个数中每任意两个不同的数的最大公约数的和。
输入输出样例
输入样例#1:
10
输出样例#1:
67
说明
对于40%的数据,2≤N≤2000.
对于100%的数据,2≤N≤2000000.
题解
因为只有单组询问,所以可以用各种奇怪姿势过,这里还是直接上数论。
初始式子:
ans=\sum_{i=1}^n\sum_{j=1}^ngcd(i,j)
我们枚举最大公因数ddd:
ans=\sum_{d=1}^nd\sum_{i=1}^n\sum_{j=1}^n[gcd(i,j)=d]
日常提出ddd:
ans=\sum_{d=1}^nd\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{d}\rfloor}[gcd(i,j)=1]
又是日常替换[gcd(i,j)=1][gcd(i,j)=1][gcd(i,j)=1]:
ans=\sum_{d=1}^nd\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{d'|gcd(i,j)}\mu(d')
日常先枚举d′d′d':
ans=\sum_{d=1}^nd\sum_{d'=1}^n\mu(d')\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{d}\rfloor}[d'|gcd(i,j)]
再直接枚举d′d′d'的倍数:
ans=\sum_{d=1}^nd\sum_{d'=1}^n\mu(d')\sum_{i=1}^{\lfloor\frac{n}{dd'}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{dd'}\rfloor}
ans=\sum_{d=1}^nd\sum_{d'=1}^n\mu(d')\lfloor\frac{n}{dd'}\rfloor\lfloor\frac{n}{dd'}\rfloor
设T=dd′T=dd′T=dd',代入,直接枚举TTT:
ans=\sum_{T=1}^n\sum_{d|T}d\mu(\frac{T}{d})\lfloor\frac{n}{T}\rfloor\lfloor\frac{n}{T}\rfloor
由∑d|Tdμ(Td)⇔φ(T)∑d|Tdμ(Td)⇔φ(T)\sum_{d|T}d\mu(\frac{T}{d})\Leftrightarrow \varphi(T)得:
ans=\sum_{T=1}^n\varphi(T)\lfloor\frac{n}{T}\rfloor\lfloor\frac{n}{T}\rfloor
那么直接线筛φ(x)φ(x)\varphi(x),求前缀和,乖乖ACAC\mathcal{AC}??
然而并没有那么简单,我们多算了i=ji=ji=j的情况,并且gcd(i,j)gcd(i,j)gcd(i,j)与gcd(j,i)gcd(j,i)gcd(j,i)被重复计算,需要除以222。
代码
记得开long long" role="presentation" style="position: relative;">long longlong long\mathcal{long\ long}。
#include<bits/stdc++.h>
#define R register int
#define ll long long
using namespace std;
const int M=2e6+5,N=2e6;
int p[M],n;
ll phi[M];
bool check[M];
void get()
{R i,j,t;check[1]=phi[1]=1;for(i=2;i<=N;++i){if(!check[i])p[++p[0]]=i,phi[i]=i-1;for(j=1;j<=p[0];++j){t=i*p[j];if(t>N)break;check[t]=1;if(i%p[j]==0){phi[t]=phi[i]*p[j];break;}phi[t]=phi[i]*(p[j]-1);}phi[i]+=phi[i-1];}
}
void in(){get();scanf("%d",&n);}
void ac()
{R l,r;long long ans=0;for(l=1;l<=n;l=r+1)r=n/(n/l),ans+=1ll*(phi[r]-phi[l-1])*(n/l)*(n/l);printf("%lld",(ans-1ll*n*(n+1)/2)/2);
}
int main()
{in();ac();return 0;
}
Luogu1390 公约数的和相关推荐
- LeetCode简单题之找出数组的最大公约数
题目 给你一个整数数组 nums ,返回数组中最大数和最小数的 最大公约数 . 两个数的 最大公约数 是能够被两个数整除的最大正整数. 示例 1: 输入:nums = [2,5,6,9,10] 输出: ...
- python最大公约数和最小公倍数的求法_最大公约数和最小公倍数的求法分析
简介 求最大公约数和最小公倍数可能是编程中最常见的几个基本问题了.因为他们的基本概念基本上很早的时候就知道了,对他们的求法和他们之间的关系都比较有意思. 基本的数学性质 先从最大公约数这一部分开始吧. ...
- java编写最大公约数_Java编写最大公约数和最小公倍数
package javaapplication24; class NegativeIntegerException extends Exception{ String message; public ...
- 【蓝桥java】进制与整除之最大公约数 最小公倍数
补充: (1)欧几里得定理(辗转相除法):A和B的最大公约数 = B和A%B 的最大公约数 (2)将两个数乘起来再除以最大公约数就是最小公倍数 package cn.zzunit.jnvi;/***寻 ...
- Console-算法[if,while]-一输入两个正整数m和n,求其最大公约数和最小公倍数
ylbtech-Arithmetic:Console-算法[if,while]-一输入两个正整数m和n,求其最大公约数和最小公倍数 1.A,Demo(案例) 输入两个正整数m和n,求其最大公约数和最小 ...
- 最大公约数和最小公倍数的欧几里得算法
最大公约数的算法竟然如此简单,不说了,见代码 #include <stdio.h> int gcd(int a, int b) { if(b== 0) return a; return g ...
- 素数、最大公约数、最下公倍数、质因数分解
2013-08-18 11:20:43 素数.最大公约数.最下公倍数.质因数分解都是与素数相关的,解决了素数的问题,其他的都可以此为基础求解. 小结: 求1到n之间的素数的基本方法是通过遍历2到sqr ...
- 用欧几里得算法求最大公约数_欧几里得算法:GCD(最大公约数),用C ++和Java示例解释...
用欧几里得算法求最大公约数 For this topic you must know about Greatest Common Divisor (GCD) and the MOD operation ...
- 【算法总结】数学问题-最大公约数和最小公倍数
[算法总结]最大公约数和最小公倍数 一.最大公约数(GCD:greatest common divisor) 欧几里得算法: 若 a.b 全为零则它们的最大公约数不存在:若 a.b 其中之一为零,则它 ...
- ACMNO.22 C语言-公约公倍2 写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。 输入 两个数 输出 最大公约数 最小公倍数
题目描述 写两个函数,分别求两个整数的最大公约数和最小公倍数, 用主函数调用这两个函数,并输出结果两个整数由键盘输入. 输入 两个数 输出 最大公约数 最小公倍数 样例输入 6 15 样例输出 3 3 ...
最新文章
- delphi dbgrid 焦点 行号_火箭VS爵士领衔,多场焦点对决!今日NBA全部比赛视频直播预告...
- 实时监视同步数据库变更,这个框架真是神器
- 关于对Caffe适用场景的思考
- leaflet调用mysql_Leaflet地图框架使用手册——L.Path
- 【python 11】super()
- redistemplate注入为null_Windows DLL 注入技术
- eclipse上搭建mybatis
- 超越Linux!华为鸿蒙明年将成“第五大操作系统”,网友:何时超过iOS?
- CentOS 配置mysql允许远程登录
- 中标麒麟linux系统安装打印机_中标麒麟系统安装教程
- 安科瑞变电站综合自动化系统在变电站的应用-Susie 周
- 更改MyEclipse匹配颜色
- 金蝶各版本软件迁移到金蝶K3WISE工具补丁合集
- echarts配置项图文介绍——xAxis
- 利用机器学习预测外汇汇率
- 10篇校招/社招面经请你查收~
- Java封装继承多态练习题
- lepus mysql 复制监控_lepus 天兔监控Mysql部署
- 前端html和css的基本知识
- 基于JAVA跨境电商网站计算机毕业设计源码+数据库+lw文档+系统+部署
热门文章
- linux crontab怎么启动,【linux之crontab,启动】(示例代码)
- java反射 泛型类型_【译】9. Java反射——泛型
- 版本 tomcat_Tomcat爆出安全漏洞!Spring Cloud/Boot框架多个版本受影响
- 参数估计:矩估计和最大似然估计
- POJ 1127_Jack Straws
- Oracle ORA-00119和ORA-00132的解决方案
- IIS5.1、IIS6.0、IIS7.5中安装配置MVC 3
- C# 第三方控件 错误 LC-1
- 水晶报表图表出现红叉叉的解决方法
- redis简介与常用数据类型介绍