2480: Spoj3105 Mod

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 557  Solved: 210
[Submit][Status][Discuss]

Description

已知数a,p,b,求满足a^x≡b(mod p)的最小自然数x。

Input

    每个测试文件中最多包含100组测试数据。
    每组数据中,每行包含3个正整数a,p,b。
    当a=p=b=0时,表示测试数据读入完全。

Output

    对于每组数据,输出一行。
    如果无解,输出“No Solution”(不含引号),否则输出最小自然数解。

Sample Input

5 58 33
2 4 3
0 0 0

Sample Output

9
No Solution
 
 
 
【吐槽】
一道很简单的模板题。
当p=1时记得要特判。。。(博主因为这个wa了无数次)
 /*************
bzoj 2480
by chty
2016.11.8
*************/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<algorithm>
using namespace std;
#define mod 99991
typedef long long ll;
struct node{ll v,num,f;}hash[mod+];
ll A,B,C;
inline ll read()
{
ll x=,f=; char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-; ch=getchar();}
while(isdigit(ch)) {x=x*+ch-''; ch=getchar();}
return x*f;
}
ll gcd(ll a,ll b) {return !b?a:gcd(b,a%b);}
void insert(ll v,ll x)
{
ll t=v%mod;
while(hash[t].f&&hash[t].v!=v) {t++; if(t>mod) t-=mod;}
if(!hash[t].f) {hash[t].f=;hash[t].num=x;hash[t].v=v;}
}
ll find(ll v)
{
ll t=v%mod;
while(hash[t].f&&hash[t].v!=v) {t++; if(t>mod) t-=mod;}
if(!hash[t].f) return -;
else return hash[t].num;
}
void exgcd(ll a,ll b,ll &x,ll &y)
{
if(!b) {x=; y=; return;}
exgcd(b,a%b,x,y);
ll t=x;x=y;y=t-a/b*y;
}
ll Shank()
{
ll ret=;
for(ll i=;i<=;i++) {if(ret==B) return i;ret=ret*A%C;}
ll temp,ans(),cnt();
while((temp=gcd(A,C))!=)
{
if(B%temp) return -;
C/=temp; B/=temp;
ans=ans*(A/temp)%C;
cnt++;
}
ll m=(ll)ceil(sqrt(C*1.0)),t();
for(ll i=;i<m;i++) {insert(t,i);t=t*A%C;}
for(ll i=;i<m;i++)
{
ll x,y;
exgcd(ans,C,x,y);
ll val=x*B%C;
val=(val%C+C)%C;
ll j=find(val);
if(j!=-) return m*i+j+cnt;
ans=ans*t%C;
}
return -;
}
void pre() {for(int i=;i<=mod;i++)hash[i].f=,hash[i].num=hash[i].v=-;}
int main()
{
freopen("cin.in","r",stdin);
freopen("cout.out","w",stdout);
while(~scanf("%d%d%d",&A,&C,&B))
{
if(!(A+B+C)) break;
if(C==) {puts(""); continue;}
pre(); A%=C; B%=C;
ll ans=Shank();
if(ans==-) puts("No Solution");
else printf("%lld\n",ans);
}
return ;
}
 

【bzoj2480】Spoj3105 Mod的更多相关文章

  1. 【模板】exBSGS/Spoj3105 Mod

    [模板]exBSGS/Spoj3105 Mod 题目描述 已知数\(a,p,b\),求满足\(a^x\equiv b \pmod p\)的最小自然数\(x\). 输入输出格式 输入格式: 每个测试文件 ...

  2. 【BZOJ1467/2480】Pku3243 clever Y/Spoj3105 Mod EXBSGS

    [BZOJ1467/2480]Pku3243 clever Y/Spoj3105 Mod Description 已知数a,p,b,求满足a^x≡b(mod p)的最小自然数x. Input      ...

  3. 【HDU2815】【拓展BSGS】Mod Tree

    Problem Description   The picture indicates a tree, every node has 2 children.  The depth of the nod ...

  4. 【CF889E】Mod Mod Mod DP

    [CF889E]Mod Mod Mod 题意:给你一个序列$a_1,a_2...a_n$,定义$f(x,n)=x\mod a_n$,$f(x,i)=x\mod a_i+f(x \mod a_i,i+1 ...

  5. 【BZOJ】【2480】【SPOJ 3105】Mod

    扩展BSGS Orz zyf……然而他的题解对AC大神的题解作了引用……而坑爹的百度云……呵呵了... 扩展BSGS模板题 /************************************* ...

  6. 【51NOD-0】1046 A^B Mod C

    [算法]快速幂运算 [题解]快速幂的原理是把幂用二进制表示,从最低位a,次低位a2,次次低位(a2)2. #include<cstdio> long long quick_pow(long ...

  7. 【51NOD-0】1008 N的阶乘 mod P

    [算法]简单数学 [题解]多项式展开:(a*b)%p=(a%p*b%p)%p #include<cstdio> #include<algorithm> #define rep( ...

  8. 通用js函数集锦<来源于网络/自己> 【一】

    通用js函数集锦<来源于网络/自己>[一] 1.返回一个全地址2.cookie3.验证用户浏览器是否是微信浏览器4.验证用户浏览器是否是微博内置浏览器5.query string6.验证用 ...

  9. 首师大附中互测题:LJX的校园:入学典礼【C003】

    [C003]LJX的校园:入学典礼[难度C]—————————————————————————————————————————————————————————————————————————————— ...

随机推荐

  1. Service Mesh 了解

    是什么 Service Mesh是专用的基础设施层. 轻量级高性能网络代理. 提供安全的.快速的.可靠地服务间通讯. 与实际应用部署一起但对应用是透明的 作用 提供熔断机制(circuit-break ...

  2. Eclipse导入工程后,XDoclet错误:Missing library: xdoclet-1.2.1.jar. Select the home directory for XDoclet

    这几天在使用Open Health Tools的OpenXDS工程,在导入Eclipse后,出现下面的错误: 遂google之,在网上找到了答案.答案网址为http://blog.v-s-f.co.u ...

  3. Django 组件-中间件

    中间件 中间件的概念 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨慎实用,用不好 ...

  4. Java虚拟机(一)之开篇

    写此类文章的初始动机:被同事问道 jvm 是做什么时,竟然茫然以对: 按照惯例,从 what/where/how 等开篇,即: 一. JVM 的目的是什么? 二. JVM 是什么时候被以何总形式被安装 ...

  5. Hibernate学习2—Hibernate4 CRUD体验初步

    接着上一节,工程结构: jar包没有变化: 一.HibernateUtil 封装: com.cy.util.HibernateUtil.java: package com.cy.util; impor ...

  6. struts2学习(10)struts2国际化

    一.国际化简介: 二.struts2国际化设置: struts.xml: <?xml version="1.0" encoding="UTF-8" ?&g ...

  7. 【BZOJ】2456 mode(乱搞)

    Description 给你一个n个数的数列,其中某个数出现了超过n div 2次即众数,请你找出那个数. Input 第1行一个正整数n.第2行n个正整数用空格隔开. Output 一行一个正整数表 ...

  8. thymeleaf layout

      摘自:https://tomoya92.github.io/2017/03/09/thymeleaf-layout/   thymeleaf的layout常用的有两种方式用法 第一种将页面里的每个 ...

  9. 【转】Android 中处理崩溃异常并重启程序出现页面重叠的问题

    原文地址:http://blog.csdn.net/jiang547860818/article/details/53641113 android开发中经常会遇到程序异常,而已常常会遇到一出现异常AP ...

  10. 用Jmeter制造软件测试数据

    在测试过程难免会遇到一些需要大量测试数据的情况,如果数据没有太多的需求,或者需求本身比较简单,这时候我们可以用Jmeter参数化来实现(建议用badboy录制) 首先,我们可以通过badboy来录制实 ...