zoukankan      html  css  js  c++  java
  • CodeForces

    CodeForces - 919E
    i的周期是p,a^i的周期是p-1,枚举i,求a^i的逆元,i=c=b*a^(-i),每当右边指数增加p-1(实际大小不变),左边都会减少1,所以差了i-c个p-1周期,所以第一个满足条件的周期就找到了。因为p是质数,求逆元用费马小定理。复杂度是p*logp

    #include <iostream>
    #include <cstdio>
    #include <queue>
    #include <algorithm>
    #include <cmath>
    #include <cstring>
    #define inf 2147483647
    #define N 1000010
    #define p(a) putchar(a)
    #define For(i,a,b) for(long long i=a;i<=b;++i)
    
    using namespace std;
    long long a,b,p,x,t,k,w,z,ans;
    void in(long long &x){
        long long y=1;char c=getchar();x=0;
        while(c<'0'||c>'9'){if(c=='-')y=-1;c=getchar();}
        while(c<='9'&&c>='0'){ x=(x<<1)+(x<<3)+c-'0';c=getchar();}
        x*=y;
    }
    void o(long long x){
        if(x<0){p('-');x=-x;}
        if(x>9)o(x/10);
        p(x%10+'0');
    }
    
    long long ksm(long long a,long long b){
        long long r=1;
        while(b>0){
            if(b&1) r=r*a%p;
            a=a*a%p;
            b>>=1;
        }
        return r;
    }
    
    signed main(){
        in(a);in(b);in(p);in(x);
        t=a;
        for(register long long i=1;i<p;i++,t=t*a%p){
            k=b*ksm(t,p-2)%p;
            w=(i-k+p)%p;
            z=i+w*(p-1);
            if(z>x) continue;
            ans+=(x-z)/(p*(p-1))+1;
        }
        o(ans);
        return 0;
    }
  • 相关阅读:
    基因id转换
    Trinity的分步运行
    免费的稳定的SVN托管的服务器
    游戏化
    一个华裔男孩在美国的成长之路
    你懂USB和Type-C吗
    ios调试小技巧
    swift开发笔记19
    iOS 3DTouch应用
    iCloud实现APP多设备数据同步
  • 原文地址:https://www.cnblogs.com/war1111/p/12352963.html
Copyright © 2011-2022 走看看