zoukankan      html  css  js  c++  java
  • poj 1845 POJ 1845 Sumdiv 数学模板

    筛选法+求一个整数的分解+快速模幂运算+递归求计算1+p+p^2+````+p^n
    POJ 1845 Sumdiv
    求A^B的所有约数之和%9901

    */
    #include<stdio.h>
    #include<math.h>
    #include<iostream>
    #include<algorithm>
    #include<string.h>
    using namespace std;
    #define MOD 9901
    const int MAXN=10000;
    int prime[MAXN+1];
    void Prime()//筛选法
    {
    memset(prime,0,sizeof(prime));
    for(int i=2;i<=MAXN;i++)
    {
    if(!prime[i])
    prime[++prime[0]]=i;
    for(int j=1;j<=prime[0]&&prime[j]<=MAXN/i;j++)
    {
    prime[prime[j]*i]=1;
    if(i%prime[j]==0)
    break;
    }
    }
    }
    long long factor[100][2];//factor[i][0]存的是因子,factor[i][1]存的是次数
    int cnt;//记录不同因子的个数
    int getFactors(long long x)
    {
    cnt=0;
    long long tmp=x;
    for(int i=1;prime[i]<=tmp/prime[i];i++)
    {
    factor[cnt][1]=0;
    if(tmp%prime[i]==0)
    {
    factor[cnt][0]=prime[i];
    while(tmp%prime[i]==0)
    {
    factor[cnt][1]++;
    tmp/=prime[i];
    }
    cnt++;
    }
    }
    if(tmp!=1)
    {
    factor[cnt][0]=tmp;
    factor[cnt++][1]=1;
    }
    return cnt;
    }
    long long pow_m(long long a,long long n)//快速模幂运算
    {
    long long res=1;
    long long tmp=a%MOD;
    while(n)
    {
    if(n&1){res*=tmp;res%=MOD;}
    n>>=1;
    tmp*=tmp;
    tmp%=MOD;
    }
    return res;
    }
    long long sum(long long p,long long n)//计算1+p+p^2+````+p^n
    {
    if(p==0)
    return 0;
    if(n==0)
    return 1;
    if(n&1)//奇数
    {
    return ((1+pow_m(p,n/2+1))%MOD*sum(p,n/2)%MOD)%MOD;
    }
    else return ((1+pow_m(p,n/2+1))%MOD*sum(p,n/2-1)+pow_m(p,n/2)%MOD)%MOD;

    }
    int main()
    {
    int A,B;
    Prime();
    while(scanf("%d%d",&A,&B)!=EOF)
    {
    getFactors(A);
    long long ans=1;
    for(int i=0;i<cnt;i++)
    {
    ans*=(sum(factor[i][0],B*factor[i][1])%MOD);
    ans%=MOD;
    }
    printf("%I64d ",ans);
    }
    return 0;
    }

  • 相关阅读:
    scrapy中selenium的应用
    Django的锁和事务
    redis
    【leetcode】187. Repeated DNA Sequences
    【leetcode】688. Knight Probability in Chessboard
    【leetcode】576. Out of Boundary Paths
    【leetcode】947. Most Stones Removed with Same Row or Column
    【leetcode】948. Bag of Tokens
    【leetcode】946. Validate Stack Sequences
    【leetcode】945. Minimum Increment to Make Array Unique
  • 原文地址:https://www.cnblogs.com/PJQOOO/p/4252056.html
Copyright © 2011-2022 走看看