zoukankan      html  css  js  c++  java
  • POJ-1845 Sumdiv---因子和(快速幂+快速加法+因子和公式)

    题目链接:

    https://cn.vjudge.net/problem/POJ-1845

    题目大意:

    求AB的因子和

    解题思路:

    先将A质因数分解,然后B次方的质因数指数就是乘上B即可

    这里要mod9901,但是有除法,而且不一定有逆元,所以用公式:

    a/b mod m 等价于 a mod (m * b) / b

    所以直接求出这个即可

    但是mod m*b 这个数字可能很大,就算模上之后再相乘也会溢出,所以应该用有快速加法的快速幂

     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 typedef long long ll;
     5 const int maxn = 1000000+10;
     6 ll mul(ll a, ll b, ll m)
     7 //求a*b%m
     8 {
     9     ll ans = 0;
    10     a %= m;
    11     while(b)
    12     {
    13         if(b & 1)ans = (ans + a) % m;
    14         b /= 2;
    15         a = (a + a) % m;
    16     }
    17     return ans;
    18 }
    19 ll pow(ll a, ll b, ll m)
    20 {
    21     ll ans = 1;
    22     a %= m;
    23     while(b)
    24     {
    25         if(b & 1)ans = mul(a, ans, m);
    26         b /= 2;
    27         a = mul(a, a, m);
    28     }
    29     ans %= m;
    30     return ans;
    31 }
    32 int main()
    33 {
    34     ll a, b;
    35     //freopen("out.txt", "w", stdout);
    36     while(cin >> a >> b)
    37     {
    38         ll ans = 1, t, m = 9901, mod;
    39         for(ll i = 2; i * i <= a; i++)
    40         {
    41             if(a % i == 0)
    42             {
    43                 ll cnt = 0;
    44                 while(a % i == 0)
    45                 {
    46                     a /= i;
    47                     cnt++;
    48                 }
    49                 mod = m * (i - 1);
    50                 t = (pow(i, cnt * b + 1, mod) - 1) % mod;
    51                 t = (t + mod) % mod;
    52                 t /= (i - 1);
    53                 ans = (ans * t) % m;
    54             }
    55         }
    56         if(a > 1)
    57         {
    58             mod = m * (a - 1);
    59             t = (pow(a, b + 1, mod) - 1) % mod;
    60             t = (t + mod) % mod;
    61             t /= (a - 1);
    62             ans = (ans * t) % m;
    63         }
    64         cout<<ans<<endl;
    65     }
    66     return 0;
    67 }
  • 相关阅读:
    Kubernetes日常维护命令
    4-docker的三要素
    3-docker的安装
    2-docker介绍
    1-为什么要使用docker
    块存储、文件存储、对象存储意义及差异
    ceph分布式存储的搭建
    YAML入门:以创建一个Kubernetes deployment为例
    Zabbix通过SQL语句从数据库获取数据说明
    图解HTTP--03--http报文内的信息
  • 原文地址:https://www.cnblogs.com/fzl194/p/9045893.html
Copyright © 2011-2022 走看看