【BZOJ】2705: [SDOI2012]Longge的问题
【题意】给定n,求∑gcd(i,n),(1<=i<=n),n<=2^32
【算法】数论(欧拉函数,gcd)
【题解】批量求gcd的题目常常可以反过来枚举gcd的值。
记f(g)为gcd(i,n)=g的i的个数,则有ans=∑f(g)*g,g|n。
gcd(i,n)=g即gcd(i/g,n/g)=1,f(g)转化为φ(n/g)。
所以,ans=∑g*φ(n/g),g|n。
当然,这种纯数论问题也可以用公式法直接求解。
引用自:clover_hxy
gcd分解:d|gcd(a,b)=d|a&&d|b
过程中,[d|i]表示d是否整除i。
(图片来源:clover_hxy)
解释:第一步,用公式∑d|nφ(d)=n转化出欧拉函数。第二步,分解gcd,d|gcd(i,n)=d|i&&d|n,选择枚举d|n并依次判断d|i是否成立。
第三步,交换顺序。第四步,对于每个d,1~n中能被d整除的数字个数为n/d,得到ans=φ(d)*n/d,d|n。这个公式和之前的一致。
具体实现:
1.枚举1~sqrt(n)寻找n的因数
2.枚举2~sqrt(n)寻找n的素因数,n每次除尽已枚举到的质因数,最后x>1则x是大质数。
#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;
ll n,ans;
ll phi(ll x){
ll num=x;
for(ll i=;i*i<=x;i++)if(x%i==){
num=num*(i-)/i;
while(x%i==)x/=i;
}
if(x>)num=num*(x-)/x;
return num;
}
int main(){
scanf("%lld",&n);
ans=;
for(ll i=;i*i<=n;i++)if(n%i==){
ans+=phi(n/i)*i;
if(i*i!=n)ans+=phi(i)*n/i;
}
printf("%lld",ans);
return ;
}
【BZOJ】2705: [SDOI2012]Longge的问题的更多相关文章
- BZOJ 2705: [SDOI2012]Longge的问题 [欧拉函数]
2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 2553 Solved: 1565[Submit][ ...
- BZOJ 2705: [SDOI2012]Longge的问题
2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 2554 Solved: 1566[Submit][ ...
- BZOJ 2705: [SDOI2012]Longge的问题 GCD
2705: [SDOI2012]Longge的问题 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnl ...
- bzoj 2705: [SDOI2012]Longge的问题 歐拉函數
2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 1035 Solved: 669[Submit][S ...
- Bzoj 2705: [SDOI2012]Longge的问题 欧拉函数,数论
2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 1959 Solved: 1229[Submit][ ...
- BZOJ 2705: [SDOI2012]Longge的问题( 数论 )
T了一版....是因为我找质因数的姿势不对... 考虑n的每个因数对答案的贡献. 答案就是 ∑ d * phi(n / d) (d | n) 直接枚举n的因数然后求phi就行了. 但是我们可以做的更好 ...
- [bzoj]2705: [SDOI2012]Longge的问题[数论][数学][欧拉函数][gcd]
[bzoj]P2705 OR [luogu]P2303 Longge的问题 Description Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需 ...
- bzoj 2705: [SDOI2012]Longge的问题——欧拉定理
Description Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N). Input 一 ...
- BZOJ 2705 [SDOI2012]Longge的问题(欧拉函数)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2705 [题目大意] 求出∑gcd(i,N)(1<=i<=N) [题解] $ ...
- [bzoj 2705][SDOI2012]Longge的问题(数学)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2705 分析: 设k为n的因数 设f[k]为gcd(x,n)==k的x的个数,容易知道a ...
随机推荐
- 开启假期JAVA之路
. 从最基础的JAVA开始学起,已经上了三节课啦!希望在课程结束后能完成一个令自己满意的连连看项目,期待ing~ 慢慢的从简单的代码上手了~ . 用循环输出等腰三角形的效果 import java.u ...
- Java中I/O流之数据流
Java 中的数据流: 对于某问题:将一个 long 类型的数据写到文件中,有办法吗? 转字符串 → 通过 getbytes() 写进去,费劲,而且在此过程中 long 类型的数需要不断地转换. ...
- Zigbee安全基础篇Part.3
原文地址: https://www.4hou.com/wireless/14294.html 导语:在之前的文章中提供了ZigBee协议及其安全功能的简要概述.在本文中,我们将探讨可在ZigBee网络 ...
- ES6之 =>箭头函数
原文,请点此链接http://www.cnblogs.com/allenxieyusheng/p/5784728.html 1. 第一个函数 ()=>1 解析:其实这是一个匿名函数直接执行 (f ...
- 【Redis】- 主从复制
Redis跟MySQL一样,拥有非常强大的主从复制功能,而且还支持一个master可以拥有多个slave,而一个slave又可以拥有多个slave,从而形成强大的多级服务器集群架构. redis的主从 ...
- 硬盘引导扇区、多分区图、不通硬盘的LINUX逻辑分区数量
主要启动记录区(Master Boot Record,MBR):可以安装开机管理程序的地方,有446byte 分割表(Paritition table):记录整块硬盘分割的状态,有64bytes 下面 ...
- pyHeatMap生成热力图
库链接:https://pypi.org/project/pyheatmap/ 现在的linux系统默认都是安装好的py环境,直接用pip进行热力库安装 pip install pyheatmap 或 ...
- Spring MVC之@RequestBody@ResponseBody详解
引言: 接上一篇文章讲述处理@RequestMapping的方法参数绑定之后,详细介绍下@RequestBody.@ResponseBody的具体用法和使用时机: 简介: @RequestBody 作 ...
- BZOJ3139/BZOJ1306 HNOI2013比赛/CQOI2009循环赛(搜索)
搜索好难啊. 1.对于每个分数集合记忆化. 2.某人得分超过总分,剪枝. 3.某人之后全赢也无法达到总分,剪枝. 4.每有一场比赛分出胜负总分会多三分,而平局则会多两分.某人的分出胜负场次或平局场次超 ...
- zoj 1298 Domino Effect (最短路径)
Domino Effect Time Limit: 2 Seconds Memory Limit: 65536 KB Did you know that you can use domino ...