[BZOJ2705] [SDOI2012] Longge的问题 - 欧拉函数
来源:互联网 发布:pychram软件运行环境 编辑:程序博客网 时间:2024/06/05 07:35
根据题目要求,我们要求出 ∑ gcd(i,N) 。初看这题,仿佛很难下手,因为N的范围是到Max_int,答案已经达到longlong型,不可能全部枚举。 我们不妨枚举N的约数,这样枚举的效率是O (log n)。然后我们要求出针对每一个约数k, gcd(i,N)=k的答案数。
那么我们通过如下过程:
∵gcd(i,N)=k ∴ gcd(i/k,N/k)=1
又∵i>0,i<=N
∴ 我们用S(k)表示gcd(i/k,N/k)=1这样的i的个数
则S(k)即 满足1<=i<=N/k的与N/k互素的i总数
那么最终的答案Ans = ∑(k*S(k))
我们用欧拉函数求出每一个约数k的gcd(i,N)=k的答案数,就能得到答案
#include "iostream"using namespace std;typedef long long ll;ll sum=0,n;inline ll Eular (int x){ ll ans=x; for (int i=2;i*i<=x;i++) { if(x%i==0) ans=ans/i*(i-1); while(x%i==0) x/=i;} if(x>1) ans=ans/x*(x-1); return ans;} int main(){ int i; cin>>n; for (i=1;i*i<=n;i++) if(n%i==0){ sum+=n/i*Eular(i); if(i*i-n) sum+=i*Eular(n/i); } cout<<sum<<endl; return 0;}
0 0
- BZOJ2705 [SDOI2012]Longge的问题(欧拉函数)
- [欧拉函数]Bzoj2705 Longge的问题[SDOI2012]
- 【bzoj2705】【sdoi2012】【longge的问题】【欧拉函数】
- 【bzoj2705】[SDOI2012]Longge的问题 欧拉函数
- [BZOJ2705] [SDOI2012] Longge的问题 - 欧拉函数
- bzoj2705: [SDOI2012]Longge的问题 欧拉函数
- BZOJ2705 [SDOI2012]Longge的问题 【欧拉函数】
- BZOJ2705: [SDOI2012]Longge的问题(欧拉函数)
- bzoj2705[SDOI2012]Longge的问题 欧拉函数
- [BZOJ2705][SDOI2012]Longge的问题(欧拉函数)
- BZOJ2705 [SDOI2012]Longge的问题 【欧拉函数】
- 【欧拉函数】BZOJ2705(SDOI2012)[Longge的问题]题解
- 【欧拉函数】BZOJ2705 [SDOI2012]Longge的问题
- BZOJ2705[Longge的问题] 欧拉函数
- bzoj2705[SDOI2012]Longge的问题
- 【SDOI2012】【BZOJ2705】Longge的问题
- [BZOJ2705][SDOI2012]Longge的问题
- BZOJ2705: [SDOI2012]Longge的问题
- loadrunner简单使用——HTTP,WebService,Socket压力测试脚本编写
- 无法激活服务,因为它不支持 ASP.NET 兼容性
- Android开发随笔之自定义TitleBar
- Linux下iptables开放端口端示例
- 你只是追逐时髦的码农
- [BZOJ2705] [SDOI2012] Longge的问题 - 欧拉函数
- zjnu 1762 U(想法、线段树)
- 【POJ 1191】 棋盘分割(DP)
- SQL调优 - Hints指定索引 解决慢查询案例
- pat--列出连通集
- OC 中new与alloc/init的区别
- Socket通信模式和URL通信模式
- 欢迎使用CSDN-markdown编辑器
- 银行家算法(1)——概念与举例说明(多进程管理资源分配避免死锁)