博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ2705:[SDOI2012]Longge的问题——题解
阅读量:6815 次
发布时间:2019-06-26

本文共 884 字,大约阅读时间需要 2 分钟。

Description

Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题。现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N)。

Input

一个整数,为N。

Output

一个整数,为所求的答案。

Sample Input

6

Sample Output

15

————————————————————————————————————————————

的博客已经讲的蛮清楚了,这里在复述一遍。

gcd(i,n)的值显然是n的约数,这里取k=gcd(i,n),满足该关系式的i的个数为s(k)。

则答案为k*s(k)(k|n)

又因为k=gcd(i,n)推出gcd(n/k,i/k)=1,设t=i/k,则n/k与t互质,求出t的个数。

这显然可以用欧拉函数解决,那么s(k)=phi(n/k)

 

#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long ll;ll phi(ll x){ ll res=x; for(ll i=2;i*i<=x;i++){ if(x%i==0){ res-=res/i; while(x%i==0)x/=i; } } if(x>1)res-=res/x; return res;}int main(){ ll n; scanf("%lld",&n); ll ans=0; for(int i=1;i*i<=n;i++){ if(n%i==0){ ans+=(ll)i*phi(n/i); if(i*i

 

转载于:https://www.cnblogs.com/luyouqi233/p/8193306.html

你可能感兴趣的文章
The-ith-Element
查看>>
找规律 Codeforces Round #290 (Div. 2) A. Fox And Snake
查看>>
枚举 POJ 1753 Flip Game
查看>>
洛谷3396:哈希冲突——题解
查看>>
Mysql之数据库设计
查看>>
Java Enum
查看>>
method="post" 用户名和密码不显示在网址里
查看>>
LeetCode----8. String to Integer (atoi)(Java)
查看>>
JSP标签
查看>>
Python--day65--母版和继承的基本使用
查看>>
在python 3.6的eclipse中,导入from lxml import etree老是提示,Unresolved import:etree的错误...
查看>>
经纬度计算距离
查看>>
Linux 在添加一个新账号后却没有权限怎么办
查看>>
React 源码剖析系列 - 不可思议的 react diff
查看>>
走近抽象类与抽象方法
查看>>
4. 寻找两个有序数组的中位数
查看>>
React组件开发总结
查看>>
各种符号
查看>>
大道至简,职场上做人做事做管理
查看>>
抗干扰的秘诀:分类、整理与专注
查看>>