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));
    }
  • 相关阅读:
    C语言I博客作业07
    C语言I博客作业06
    C语言I博客作业05
    C语言I博客作业04
    C语言I博客作业03
    C语言第二周作业
    C语言第一周课程作业
    C语言期末总结
    第一次作业
    C语言I博客作业09
  • 原文地址:https://www.cnblogs.com/zcysky/p/7475281.html
Copyright © 2011-2022 走看看