zoukankan      html  css  js  c++  java
  • [TJOI2007] 可爱的质数

    Description

    给定一个质数 (p),以及一个整数 (b),一个整数 (n),现在要求你计算一个最小的 (l),满足 (b^l equiv n pmod p)

    Solution

    BSGS模板题

    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    
    int qpow(int p,int q,int mod) {return (q&1?p:1)*(q?qpow(p*p%mod,q/2,mod):1)%mod;}
    
    // b^x=n mod p
    int solve(int p,int b,int n) {
        int m=ceil(sqrt(p)),i,t,temp,flag=0;
        map<int,int> f;
        for(t=1,i=0;i<m;t=t*b%p,i++) if(f.find(t)==f.end()) f[t]=i;
        auto it=f.begin();
        for(t=1,temp=qpow(b,p-m-1,p),i=0;i<m;t=t*temp%p,i++) {
            it=f.find(n*t%p);
            if(it!=f.end()) return i*m+it->second;
        }
        return -1;
    }
    
    signed main() {
        int p,b,n;
        cin>>p>>b>>n;
        int tmp=solve(p,b,n);
        if(tmp>=0) cout<<tmp;
        else cout<<"no solution";
    }
    
  • 相关阅读:
    CSS属性之定位
    CSS选择器区别
    HTML属性及其相关区别
    HTML标签区别
    HTML其他概念
    CSS3新特性
    HTML5新标签
    HTML5新特性
    params修饰符的用法
    C#中引用参数ref和输出参数out
  • 原文地址:https://www.cnblogs.com/mollnn/p/13150483.html
Copyright © 2011-2022 走看看