zoukankan      html  css  js  c++  java
  • POJ1845s——Sumdiv()

    传送门

    我们可以发现aba^b的所有质因子其实就是bbaa的所有质因子

    所以我们先求出a的所有质因子

    然后把数量乘b就可以了

    而对于一个数的所有质因子之和ΣpkΣp^k

    等于(1+p1+p1^2 +p13+…p1k1) * (1+p2+p22+p23+….p2^k2) * (1+p3+ p3^3 +…+ p3^k3) * … * (1+pn+pn^2 +pn^ +…pn^kn)

    而对于每一部分,都是一个等比数列

    只需要递归去求

    然后把所有乘起来就是了

    #include<iostream>
    #include<stdio.h>
    #include<algorithm>
    #include<cstdio>
    #include<cmath>
    #include<math.h>
    #include<cstring>
    #include<string.h>
    #include<cstdlib>
    using namespace std;
    #define ll long long
    #define mod 9901
    ll a,b;
    ll de[1000000],num[100000],j,ans;
    inline int read(){
     char ch=getchar();
     int res=0;
     while(!isdigit(ch)) ch=getchar();
     while(isdigit(ch)) res=(res<<3)+(res<<1)+(ch^48),ch=getchar();
     return res;
    }
    inline ll fen(ll k)
    {
     for(ll i=2;i*i<=k;i++)
     {
      if(k%i==0)
      {
       de[++j]=i;
       while(k-(k/i)*i==0)
       {
        num[j]++;
        k/=i;
       }
       num[j]*=b; 
      }
     }
     if(k!=1)
     {
      de[++j]=k;
      num[j]=b;
     }
    }
    inline ll mul(ll p,ll n)
    {
     int as=1;
     while(n>0)
     {
      if(n%2)
      {
       as=(as*p)%mod;
      }
      n/=2;
      p=p*p%mod;
     }
     return as;
    }
    inline ll sum(ll p,ll n)
    {
     if(n==0) return 1;
     if(n%2) 
     {
      return (sum(p,n/2)*(1+mul(p,n/2+1)))%mod;
     }
     return (sum(p,n/2-1)*(1+mul(p,n/2+1))+mul(p,n/2))%mod;
    }
    int main(){
     a=1ll*read();
     b=1ll*read();
     fen(a);
     ans=1;
     for(int i=1;i<=j;i++)
     {
      ans*=sum(de[i],num[i]);
      ans%=mod;
     }
     cout<<ans<<endl;
     return 0;
    }
    
  • 相关阅读:
    9-2 链表
    transient
    获取当前电脑的ip地址
    LinkList
    Java代码模拟链表
    什么是复合主键
    wp8 入门到精通
    C# 从入门到精通
    wp8 json2csharp
    wp8 安装.Net3.5
  • 原文地址:https://www.cnblogs.com/stargazer-cyk/p/10366442.html
Copyright © 2011-2022 走看看