HDU 4983 Goffi and GCD

思路:数论题。假设k为2和n为1。那么仅仅可能1种。其它的k > 2就是0种,那么事实上仅仅要考虑k = 1的情况了。k = 1的时候,枚举n的因子,然后等于求该因子满足的个数,那么gcd(x, n) = 该因子的个数为phi(n / 该因子),然后再利用乘法原理计算就可以

代码:

#include <cstdio>
#include <cstring>
#include <cmath>typedef long long ll;const ll MOD = 1000000007;
const int N = 35333;ll n, k, pn, vis[N];
ll prime[N], frc[N], fn, cnt[N];void getprime() {pn = 0;for (ll i = 2; i < N; i++) {if (vis[i]) continue;prime[pn++] = i;for (ll j = i * i; j < N; j += i)vis[j] = 1;}
}void getfrc(ll n) {fn = 0;for (ll i = 0; i < pn && n >= prime[i]; i++) {if (n % prime[i] == 0) {frc[fn] = prime[i];cnt[fn] = 0;while (n % prime[i] == 0) {cnt[fn]++;n /= prime[i];}fn++;}}if (n != 1) {frc[fn] = n;cnt[fn++] = 1;}
}ll ans = 0;ll phi(ll n) {ll m = (ll)sqrt(n * 1.0);ll ans = n;for (ll 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;
}void dfs(ll u, ll sum) {if (u == fn) {ll r = n / sum;ans = (phi(n / sum) * phi(sum) % MOD + ans) % MOD;return;}for (ll i = 0; i <= cnt[u]; i++) {dfs(u + 1, sum);sum *= frc[u];}
}ll solve() {getfrc(n);ans = 0;dfs(0, 1);return ans;
}int main() {getprime();while (~scanf("%I64d%I64d", &n, &k)) {if (n == 1) printf("1\n");else if (k == 2) printf("1\n");else if (k > 2) printf("0\n");else {printf("%I64d\n", solve());}}return 0;
}

转载于:https://www.cnblogs.com/gccbuaa/p/6852180.html

HDU 4983 Goffi and GCD(数论)相关推荐

  1. hdu 4983 Goffi and GCD(欧拉函数)

    Problem Description Goffi is doing his math homework and he finds an equality on his text book: gcd( ...

  2. hdu 4676 Sum Of Gcd 莫队+phi反演

    Sum Of Gcd 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4676 Description Given you a sequence of ...

  3. hdu 4983(欧拉函数)

    题目大意:给出一组n和k,求解满足公式:gcd(n-a,n)*gcd(n-b,n)=n^k的(a,b)的对数,结果对(1e9+7)取模. 先证明:对于1<=x<=n,有gcd(n-x , ...

  4. HDU 2504 又见GCD

    HDU 2504 文章目录 Problem Description 题解: 代码: Problem Description 有三个正整数a,b,c(0<a,b,c<10^6),其中c不等于 ...

  5. HDU 1576 A/B(数论简单题,求逆元)

    A/B Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  6. HDU 5755 Gambler Bo(数论)

    题目链接: http://acm.split.hdu.edu.cn/showproblem.php?pid=5755 题目大意: 给你一个矩阵,矩阵中是0,1,2三个数,你每次可以给其中一个数加2,但 ...

  7. HDU 2504 又见GCD

    又见GCD Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  8. CodeForces - 1459C Row GCD(数论+推公式)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的数组 aaa,再给出一个长度为 mmm 的数组 bbb,现在要求输出,当 j=1,2,...,mj = 1,2,...,mj=1,2,...,m ...

  9. P1447-[NOI2010]能量采集【GCD,数论,容斥】

    正题 题目链接:https://www.luogu.org/problemnew/show/P1447 题目大意 求∑i=1n∑j=1mgcd(i,j)∗2−1\sum_{i=1}^n\sum_{j= ...

  10. jzoj3384-理工男【欧拉定理,gcd,数论】

    正题 大意 给出一个分数ABAB\frac{A}{B}求它在k进制下的小数循环. 如果是有限小数直接输出位数 无限循环输出混循环节和循环节长度. 代码 直接切正题 用a数组表示每一位的余数,然后a[0 ...

最新文章

  1. 基于视角特征提取的3D检测方法汇总
  2. 多图片每隔2S循环播放
  3. AMG8833的使用与stm32驱动代码
  4. “Duke选择大奖”荟萃2009最具创新的Java技术应用
  5. 【10.9】multiprocessing多进程编程
  6. 计算机视觉编程——图像内容分类
  7. “压扁数组”技巧(flattening the array)
  8. 同域下iframe操作时,js访问document出现拒绝访问的问题原因
  9. 06Struts2国际化实现
  10. 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题 1
  11. 《腾讯iOS测试实践》一一1.8 小结
  12. JDBC链接MySQL数据库
  13. 修改软件的ico图片方法
  14. 焦作机器人编程比赛_焦作市山阳区东环小学在第二十届全国中小学电脑制作活动“机器人竞赛”焦作选拔赛中创佳绩...
  15. 远程访问SOAP协议接口
  16. 手把手带你实现 Docker 部署 Redis 集群
  17. SAP BASIS ADM100 中文版 Unit 9(5)
  18. 忆龙2009:印度反倾销棒打中兴华为 商务部紧急应对
  19. python字符串编码及乱码解决方案
  20. 计算机应用大赛宣传稿,江苏开放大学计算机应用基础中国名城宣传片

热门文章

  1. 苹果Mac 2D/3D数字雕刻软件:Pixologic Zbrush
  2. Mac高效笔记软件GoodNotes 5
  3. MAC完全卸载/删除Parallels Desktop虚拟机和PD虚拟机文件的方法
  4. 如何使用Omni Remover Mac版释放Mac上的空间
  5. 更新:第6章已上线!最酷的程序员应该知道的【LLVM】!
  6. zookeeper-架构设计与角色分工-《每日五分钟搞定大数据》
  7. 确保大数据安全的5个最佳实践措施
  8. java 基础数据结构源码详解及数据结构算法
  9. [基础] Array.prototype.indexOf()查询方式
  10. 添加Centos缺失的命令