• 约数及约数个数,约数乘积的计算


    869. 试除法求约数

    给定 n

    个正整数 ai,对于每个整数 ai

    ,请你按照从小到大的顺序输出它的所有约数。

    输入格式

    第一行包含整数 n

    接下来 n

    行,每行包含一个整数 ai

    输出格式

    输出共 n

    行,其中第 i 行输出第 i 个整数 ai

    的所有约数。

    数据范围

    1≤n≤100

    ,
    2≤ai≤2×109

    输入样例:

    1. 2
    2. 6
    3. 8

    输出样例:

    1. 1 2 3 6
    2. 1 2 4 8

    1. /**
    2. * 对于一个数的约数,一般都是成双成对的出现,除了完全平方数的因子只
    3. * 有一个;
    4. * 所以我们可以只算小于sqrt(val)的因子d,大于sqrt(val)的因子可以直接
    5. * 用val/d算出来。
    6. */
    7. #include
    8. #include
    9. using namespace std;
    10. set<int> get_divisors(int val)
    11. {
    12. set<int> res;
    13. for(int i=1;i<=val/i;++i)
    14. {
    15. if(val%i==0)
    16. {
    17. res.insert(i);
    18. if(val/i!=i)
    19. res.insert(val/i);
    20. }
    21. }
    22. return res;
    23. }
    24. int main()
    25. {
    26. int n;
    27. cin >> n;
    28. while(n--)
    29. {
    30. int val;
    31. cin >> val;
    32. set<int> res=get_divisors(val);
    33. for(auto a:res)
    34. cout << a << ' ';
    35. cout << endl;
    36. }
    37. return 0;
    38. }

    870. 约数个数

    给定 n

    个正整数 ai,请你输出这些数的乘积的约数个数,答案对 109+7

    取模。

    输入格式

    第一行包含整数 n

    接下来 n

    行,每行包含一个整数 ai

    输出格式

    输出一个整数,表示所给正整数的乘积的约数个数,答案需对 109+7

    取模。

    数据范围

    1≤n≤100

    ,
    1≤ai≤2×109

    输入样例:

    1. 3
    2. 2
    3. 6
    4. 8

    输出样例:

    12
    

     

     * 任何一个正整数n都能写成若干个质因子相乘的结果;
     * 对于一个正整数n的质因子分解为各质因子Pi的个数分别为e1,e2,...,ek;
     * 则n的约数个数为(e1+1)*(e2+1)*...*(ek+1);

    1. /**
    2. * 任何一个正整数n都能写成若干个质因子相乘的结果;
    3. * 对于一个正整数n的质因子分解为各质因子Pi的个数分别为e1,e2,...,ek;
    4. * 则n的约数个数为(e1+1)*(e2+1)*...*(ek+1);
    5. */
    6. #include
    7. #include
    8. using namespace std;
    9. typedef long long ll;
    10. const int mod= 1e9+7;
    11. int main()
    12. {
    13. int n;
    14. cin >> n;
    15. unordered_map<int,int> ump;
    16. while(n--)
    17. {
    18. int val;
    19. cin >> val;
    20. for(int i=2;i<=val/i;++i)
    21. {
    22. if(val%i==0)
    23. {
    24. while(val%i==0)
    25. {
    26. ump[i]++;
    27. val/=i;
    28. }
    29. }
    30. }
    31. if(val>1)
    32. ump[val]++;
    33. }
    34. ll res=1;
    35. for(auto a:ump)
    36. res=res*(a.second+1)%mod;
    37. cout << res << endl;
    38. return 0;
    39. }

    871. 约数之和

    给定 n

    个正整数 ai,请你输出这些数的乘积的约数之和,答案对 109+7

    取模。

    输入格式

    第一行包含整数 n

    接下来 n

    行,每行包含一个整数 ai

    输出格式

    输出一个整数,表示所给正整数的乘积的约数之和,答案需对 109+7

    取模。

    数据范围

    1≤n≤100

    ,
    1≤ai≤2×109

    输入样例:

    1. 3
    2. 2
    3. 6
    4. 8

    输出样例:

    252
    

     coding:

     * 任何一个正整数n都能写成若干个质因子相乘的结果;
     * 对于一个正整数n的质因子分解为各质因子Pi的个数分别为e1,e2,...,ek;
     * 则n的约数之和为

    (1+p1+p1^2+...+p1^e1)+(1+p2kp2^2+...+p2^e2)+...+(1+pk+pk^2+...+pk^ek);

    1. /**
    2. * 任何一个正整数n都能写成若干个质因子相乘的结果;
    3. * 对于一个正整数n的质因子分解为各质因子Pi的个数分别为e1,e2,...,ek;
    4. * 则n的约数之和为
    5. * (1+p1+p1^2+...+p1^e1)+(1+p2kp2^2+...+p2^e2)+...+(1+pk+pk^2+...+pk^ek);
    6. */
    7. #include
    8. #include
    9. using namespace std;
    10. typedef long long ll;
    11. const int mod= 1e9+7;
    12. int main()
    13. {
    14. int n;
    15. cin >> n;
    16. unordered_map<int,int> ump;
    17. while(n--)
    18. {
    19. int val;
    20. cin >> val;
    21. for(int i=2;i<=val/i;++i)
    22. {
    23. if(val%i==0)
    24. {
    25. while(val%i==0)
    26. {
    27. ump[i]++;
    28. val/=i;
    29. }
    30. }
    31. }
    32. if(val>1)
    33. ump[val]++;
    34. }
    35. ll res=1;
    36. for(auto a:ump)
    37. {
    38. int f=a.first,s=a.second;
    39. ll t=1;
    40. while(s--) t=(t*f+1)%mod;
    41. res=res*t%mod;
    42. }
    43. cout << res << endl;
    44. return 0;
    45. }

    872. 最大公约数

    给定 n

    对正整数 ai,bi

    ,请你求出每对数的最大公约数。

    输入格式

    第一行包含整数 n

    接下来 n

    行,每行包含一个整数对 ai,bi

    输出格式

    输出共 n

    行,每行输出一个整数对的最大公约数。

    数据范围

    1≤n≤105

    ,
    1≤ai,bi≤2×109

    输入样例:

    1. 2
    2. 3 6
    3. 4 6

    输出样例:

    1. 3
    2. 2

     coding:

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

  • 相关阅读:
    李福攀:Kata安全容器在蚂蚁集团的应用实践
    第二周学习报告
    计算机丢失mfc140u.dll怎么办,mfc140u.dll丢失的解决方法分享
    高等工程数学 —— 第五章 (2)非线性规划的最优条件
    JavaCV的摄像头实战之七:推流(带声音)
    使用php实现pc端和移动端分离
    ffmpeg & ffplay
    Vue2和Vue3的响应式原理及区别
    Postgresql RECORD与%ROWTYPE类型
    java计算机毕业设计物业服务管理系统源程序+mysql+系统+lw文档+远程调试
  • 原文地址:https://blog.csdn.net/qq_51825761/article/details/126213851