zoukankan      html  css  js  c++  java
  • 【BubbleCup X】F:Product transformation

    按照题解的规律,首先能看出前面每个数幂次的性质。

    然后发掘约数的性质

    #include<bits/stdc++.h>
    const int N=1000010;
    typedef long long ll;
    using namespace std;
    int n,m,a,Q,yql,ans[N],fac[N],inv[N];
    inline int C(int n,int k){
        return 1LL*fac[n]*inv[k]%yql*inv[n-k]%yql;
    }
    inline int fpow(int x,int p,int yql){
        int ans=1;
        for(;p;p>>=1,x=1LL*x*x%yql)if(p&1)ans=1LL*ans*x%yql;
        return ans;
    }
    inline int read(){
        int f=1,x=0;char ch;
        do{ch=getchar();if(ch=='-')f=-1;}while(ch<'0'||ch>'9');
        do{x=x*10+ch-'0';ch=getchar();}while(ch>='0'&&ch<='9');
        return f*x;
    }
    int main(){
        n=read();m=read();a=read();Q=read();
        int now=1;
        for(int i=1;;i++){
            now=1LL*now*a%Q;if(now==1){yql=i;break;}
        }
        fac[0]=1;for(int i=1;i<=m;i++)fac[i]=(1LL*fac[i-1]*i)%yql;
        inv[m]=fpow(fac[m],yql-2,yql);
        for(int i=m-1;i>=0;i--)inv[i]=1LL*inv[i+1]*(i+1)%yql;
        int lim=min(n,m+1);
        for(int i=1;i<=lim;i++)ans[n-i+1]=(ans[n-i+2]+C(m,i-1))%yql;
        for(int i=n-lim;i;i--)ans[i]=ans[i+1];
        //for(int i=1;i<=n;i++)printf("%d ",ans[i]);puts("");
        for(int i=1;i<=n;i++)printf("%d ",fpow(a,ans[i],Q));
    }
  • 相关阅读:
    UVALive 7509 Dome and Steles
    HDU 5884 Sort
    Gym 101194H Great Cells
    HDU 5451 Best Solver
    HDU 5883 The Best Path
    HDU 5875 Function
    卡特兰数
    UVa 11729 Commando War 突击战
    UVa 11292 The Dragon of Loowater 勇者斗恶龙
    Spark Scala Flink版本对应关系
  • 原文地址:https://www.cnblogs.com/zcysky/p/7475281.html
Copyright © 2011-2022 走看看