hdu 4983 gcd与欧拉函数
来源:互联网 发布:js改变display样式 编辑:程序博客网 时间:2024/06/05 04:28
点击打开链接
给出一组n和k,求解满足公式:gcd(n-a,n)*gcd(n-b,n)=n^k的(a,b)的对数,结果对(1e9+7)取模
//gcd(n-a,n)=e gcd(a,n)=f e=f
// e|n-a e|n e|a e<=f
// f|a f|n f|n-a e>=f e=f
// gcd(n-a,n)*gcd(n-b,n)=gcd(a,n)*gcd(b,n)=n^k
// k>2 无解
// k=2 a=n,b=n;
// k=1 gcd(a,n)=x 时 gcd(b,n)就要等于=n/x 枚举n的约数x即可
//gcd(n-a,n)=e gcd(a,n)=f e=f// e|n-a e|n e|a e<=f// f|a f|n f|n-a e>=f e=f// gcd(n-a,n)*gcd(n-b,n)=gcd(a,n)*gcd(b,n)=n^k // k>2 无解// k=2 a=n,b=n;// k=1 gcd(a,n)=x 时 gcd(b,n)就要等于=n/x 枚举n的约数x即可 #include <iostream>#include <cstring>#include <vector>#include <cmath>#include <map> using namespace std;const int N=1e6+20;const int mod=1e9+7;typedef long long ll;ll a,b;ll Euler(ll n){ll m=sqrt(n+0.5);ll ans=n;for(int i=2;i<=m;i++){if(n%i==0){ans=ans/i*(i-1);}while(n%i==0)n/=i;}if(n>1)ans=ans/n*(n-1); return ans;}int main(){ll n,k; while(cin>>n>>k){if(n==1) {cout<<1<<endl;continue;}if(k>2)cout<<0<<endl;else if(k==2)cout<<1<<endl;else{ll ans=0;for(int i=1;i*i<=n;i++){//gcd(n,a)=x 有多少个a满足呢?// gcd(n/x,a/x)=1 与n/x互质的有多少个就有多少个a->phi[n/x]个 if(n%i==0){int a=Euler(n/i);int b=Euler(i);if(i*i==n)ans+=a*b;elseans=(ans+2*a*b)%mod;//调换位置 }}cout<<ans%mod<<endl;}}return 0; }
0 0
- hdu 4983 gcd与欧拉函数
- 欧拉函数 与 GCD
- hdu 4983 Goffi and GCD(欧拉函数)
- [欧拉函数] hdu 4983 Goffi and GCD
- HDU 4983 Goffi and GCD(数列、欧拉函数)
- HDU-4983-Goffi and GCD【数论】【欧拉函数】
- hdu 2588 GCD 欧拉函数
- hdu 1787 GCD Again 欧拉函数
- hdu 2588 GCD(欧拉函数)
- HDU 2588 GCD(欧拉函数)
- GCD +hdu+欧拉函数的应用
- HDU 2588 GCD (欧拉函数)
- HDU 1787 GCD Again 欧拉函数
- HDU 2588 GCD 欧拉函数
- hdu GCD Again(欧拉函数)
- hdu 2588 GCD---欧拉函数
- HDU 2588 GCD(欧拉函数)
- HDU 1787 GCD Again (欧拉函数)
- 【GIT】[Git高级教程 (一)] 通过Tag标签回退版本修复bug
- 正则表达式总结
- UVa 1339 Ancient Cipher(古老的密码)
- java面向对象的三大特性----封装、继承、多态
- Linux 平台下阅读源码的工具链
- hdu 4983 gcd与欧拉函数
- 消息机制--Handler
- 构建高并发高可用的电商平台架构实践
- HDOJ 1003 Java答案
- httpclient爬取网页
- VS2010下用C++编写图书管理小程序;(程序主要代码来自明日科技的书,但版本有差异,所以进行了部分调试和修改。)
- javafx 实现日期选择器,带有时分
- OpenGL学习脚印: 反走样初步(Anti-aliasing basic)
- Centos 6.0 Shadowsocks配置