zoukankan      html  css  js  c++  java
  • poj1845 sumdiv (因数的和)

    首先分解质因数,$A^B=p_1^{m_1B}p_2^{m_2B}...p_n^{m_nB}$

    然后的话,它的所有因数的和就是$prod{(1+p_i^1+p_i^2+...+p_i^n)}$

    用一个等比数列求和公式,变成了$prod{frac{p_i^{m_iB+1}-1}{p_i-1}}$

    但是要求逆元的话,它的模数很小,可能求不了

    所以在算$p_i^{n+1}-1$的时候先模的是$mod*(p_i-1)$,然后直接除以$p_i-1$,一定能整除

    最后再模一边mod就行了

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #define pa pair<int,int>
     5 #define CLR(a,x) memset(a,x,sizeof(a))
     6 using namespace std;
     7 typedef long long ll;
     8 const int maxn=1e4,P=9901;
     9 
    10 inline ll rd(){
    11     ll x=0;char c=getchar();int neg=1;
    12     while(c<'0'||c>'9'){if(c=='-') neg=-1;c=getchar();}
    13     while(c>='0'&&c<='9') x=x*10+c-'0',c=getchar();
    14     return x*neg;
    15 }
    16 
    17 ll p[maxn];
    18 ll n[maxn],a,b;
    19 
    20 inline ll fmul(ll x,ll y,ll p){
    21     ll re=0;
    22     while(y){
    23         if(y&1) re=(re+x)%p;
    24         x=(x+x)%p,y>>=1; 
    25     }return re;
    26 }
    27 
    28 inline ll fpow(ll x,ll m,ll p){
    29     ll re=1;
    30     while(m){
    31         if(m&1) re=fmul(re,x,p);
    32         x=fmul(x,x,p),m>>=1; 
    33     }return re;
    34 }
    35 
    36 int main(){
    37     int i,j=0,k;
    38     a=rd(),b=rd();
    39     for(i=2;i*i<=a;i++){
    40         if(a%i==0) p[++j]=i;
    41         while(a%i==0) n[j]++,a/=i;
    42     }if(a!=1) p[++j]=a,n[j]=1;
    43     ll ans=1;
    44     for(i=1;i<=j;i++){
    45         ll x=fpow(p[i],n[i]*b+1,(p[i]-1)*P)+(p[i]-1)*P-1;
    46         ans=ans*(x/(p[i]-1)%P)%P;
    47     }
    48     printf("%d
    ",(ans+P)%P);
    49     return 0;
    50 }
  • 相关阅读:
    stompjs使用
    WKWebView新窗口打开链接
    iOS实现自定义拍照页面
    Universal Link
    社群app开发问题记录
    C#中try catch finally
    如何生成代码项目的工程结构
    C# SqlSugar基于 .NET 开源ORM框架
    C# DataGridView 行和列的操作
    禁止EditText 自动弹出软键盘
  • 原文地址:https://www.cnblogs.com/Ressed/p/10028475.html
Copyright © 2011-2022 走看看