码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 约数相关问题


    <1>求所有约数

    869. 试除法求约数 - AcWing题库

    AC代码:

    1. #include
    2. #include
    3. #include
    4. #include
    5. using namespace std;
    6. int n;
    7. int main()
    8. {
    9. cin>>n;
    10. while(n--)
    11. {
    12. vector<int>v;
    13. int x;
    14. cin>>x;
    15. for(int i=1;i<=x/i;i++)
    16. {
    17. if(x%i==0)
    18. {
    19. v.push_back(i);
    20. if(i!=x/i)v.push_back(x/i);
    21. }
    22. }
    23. sort(v.begin(),v.end());
    24. for(auto item:v)
    25. cout<" ";
    26. cout<
    27. }
    28. return 0;
    29. }

    相关解释:

    这里就枚举2到根号x的范围就可以了,最后要排个序。

    注意这里要特别判断一下i和n/i是否相等,不然可能会重复。

    <2>求约数的个数

    870. 约数个数 - AcWing题库

    AC代码:

    1. #include
    2. #include
    3. #include
    4. #include
    5. using namespace std;
    6. const int mod = 1e9+7;
    7. int n;
    8. int main()
    9. {
    10. cin>>n;
    11. unordered_map<int,int>hash;
    12. while(n--)
    13. {
    14. int x;
    15. cin>>x;
    16. for(int i=2;i<=x/i;i++)
    17. {
    18. while(x%i==0)
    19. {
    20. hash[i]++;
    21. x/=i;
    22. }
    23. }
    24. if(x>1)hash[x]++;
    25. }
    26. long long res=1;
    27. for(auto item:hash)
    28. {
    29. res=(res*(item.second+1))%mod;
    30. }
    31. cout<
    32. return 0;
    33. }

    相关解释:

    这里使用算术基本定理(如果不知道,可以去百度),采用算术基本定理可以把所有的数分解。这题对所有的数进行分解,用什么记录呢?显然可以采用hash表来记录,如果不知道,可以看我的这篇博客STL map和unordered_map容器详解-CSDN博客。根据算法基本定理的分解式,假设分解成了p1^k1 * p2^k2 * p3*k3 * ... * pn^kn。所有这些指数k1,k2..,kn的不同选法也就构成了不同的约数,全选是最大的,与就是本身,都不选,也就是1.所以有(k1+1)*(k2+1)*..*(kn+1)种选法,也就是有这些种约数。由于可能足够大,res采用long long类型。

    <3>求约数之和

    871. 约数之和 - AcWing题库

    AC代码:

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. using namespace std;
    7. const int mod = 1e9+7;
    8. int n;
    9. int main()
    10. {
    11. cin>>n;
    12. unordered_map<int,int>hash;
    13. while(n--)
    14. {
    15. int x;
    16. cin>>x;
    17. for(int i=2;i<=x/i;i++)
    18. {
    19. while(x%i==0)
    20. {
    21. hash[i]++;
    22. x/=i;
    23. }
    24. }
    25. if(x>1)hash[x]++;
    26. }
    27. long long res=1;
    28. for(auto item:hash)
    29. {
    30. long long t=1;
    31. int p=item.first,k=item.second;
    32. while(k--)
    33. {
    34. t=(t*p+1)%mod;
    35. }
    36. res=res*t%mod;
    37. }
    38. cout<
    39. return 0;
    40. }

    相关解释:

    求约数之和一样的道理,采用算术基本定理将所有这些数进行分解,使用hash表来存储底数和指数。最后的约数之和应该是(p1^0+p1^1+...+p1^k1) * (p2^0+p2^1+...+p2^k2) * ... * (pn^0+pn^1+...+pn^kn)。为什么是这样呢,因为所有从这些括号里选择一个数,这些数相乘也就构成了某个约数,所有这些数相加也就是最后的约数之和!

    <4>求最大公约数

    872. 最大公约数 - AcWing题库

    AC‘代码:

    1. #include
    2. #include
    3. #include
    4. using namespace std;
    5. int n;
    6. int gcd(int a,int b)
    7. {
    8. return b?gcd(b,a%b):a;
    9. }
    10. int main()
    11. {
    12. cin>>n;
    13. while(n--)
    14. {
    15. int a,b;
    16. cin>>a>>b;
    17. cout<<gcd(a,b)<
    18. }
    19. return 0;
    20. }

    相关解释:

    这里采用欧几里得算法(也是辗转相除法),不知道的可以百度。注意这里不需要看谁大谁小,代码也很少,非常简便。

  • 相关阅读:
    云IDE开发产品
    计算机网络——计算机网络的性能指标(上)-速率、带宽、吞吐量、时延
    31. 下一个排列
    layUI带搜索的选择框样式和官网显示不一致
    vuex---$store案例
    vue3富文本编辑器的二次封装开发-Tinymce
    openGauss学习笔记-241 openGauss性能调优-SQL调优-审视和修改表定义
    【QT5-程序控制电源-RS232-SCPI协议-上位机-基础样例【1】】
    虹科分享 | 如何测试与验证复杂的FPGA设计(1)——面向实体或块的仿真
    Promise, async, await 学习
  • 原文地址:https://blog.csdn.net/wsywsyyy/article/details/133488920
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号