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;
    }
    
  • 相关阅读:
    Unity模型导入导出
    3D知识补充
    Unity. Navigation和寻路
    Unity坐标系
    Unity材质
    Unity摄像机
    Unity光照
    Unity资源管理与更新
    Unity垃圾回收
    intellij idea 的全局搜索快捷键方法
  • 原文地址:https://www.cnblogs.com/stargazer-cyk/p/10366442.html
Copyright © 2011-2022 走看看