zoukankan      html  css  js  c++  java
  • spoj3105 MOD

    裸的ex_bsgs,不懂ex_bsgs的可以看看这篇博客---->超级跳转

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    map<ll,ll> mp; 
    ll gcd(ll x,ll y)
    {
    	return y==0?x:gcd(y,x%y);
    }
    ll powmod(ll x,ll y,ll mod)
    {
    	ll sum=1;
    	while(y)
    	{
    		if(y&1)
    		{
    			sum=sum*x%mod;
    		}
    		x=x*x%mod;
    		y>>=1;
    	}
    	return sum;
    }
    void ex_bsgs(ll a,ll b,ll mod)
    {
         ll i,j;
         if(b==1)
         {
         	printf("0
    ");
         	return;
         }
         ll k=0,x=1;
         while(true)
         {
         	ll d=gcd(a,mod);
         	if(d==1) break;
         	if(b%d)
         	{
         		printf("No Solution
    ");
         		return;
         	}
         	mod/=d,b/=d,++k,x=x*a/d%mod;
         	if(x==b)
         	{
         		printf("%lld
    ",k);
         		return;
         	}
         }
         mp.clear();
         ll m=sqrt(mod)+1,t,tt;
         for(i=0,t=b;i<m;i++,t=t*a%mod) mp[t]=i;
         for(i=1,tt=powmod(a,m,mod),t=x*tt%mod;i<=m;i++,t=t*tt%mod)
         {
         	j=mp.find(t)==mp.end()?-1:mp[t];
    		 if(j>=0&&i*m-j+k>=0)
    		 {
    		 	printf("%lld
    ",i*m-j+k);
    		 	return;
    		 } 
         }
    } 
    int main()
    {
    	ll i,j,x,z,k;
    	while(true)
    	{
    		scanf("%lld%lld%lld",&x,&z,&k);
    		if(k==0&&z==0&&x==0) break;
    		ex_bsgs(x,k,z);
    	}
    	return 0;
    } 
    
  • 相关阅读:
    JavaScript操作DOM对象
    QTP(13)
    QTP(12)
    QTP(11)
    QTP(10)
    QTP(9)
    QTP(8)
    QTP(7)
    QTP(6)
    QTP(5)
  • 原文地址:https://www.cnblogs.com/yzxx/p/11700154.html
Copyright © 2011-2022 走看看