poj 3243 Clever Y 高次方程
- 1 Accepted 8508K 579MS C++ 2237B/**
- hash的强大,,还是高次方程,不过要求n不一定是素数
- **/
- #include <iostream>
- #include <cstdio>
- #include <cmath>
- #include <cstring>
- #include <algorithm>
- using namespace std;
- long long a,b,n;
- const int maxn = ;
- bool Hash[maxn];
- long long val[maxn];
- long long idx[maxn];
- long long gcd(long long a,long long b){
- if(b==)
- return a;
- return gcd(b,a%b);
- }
- void ex_gcd(long long a,long long b,long long &x,long long &y){
- if(b==){
- x=;
- y=;
- return ;
- }
- ex_gcd(b,a%b,x,y);
- long long tmp= x-(a/b)*y;
- x = y;
- y = tmp;
- return ;
- }
- void Insert(long long id,long long num){
- long long k = num%maxn;
- while(Hash[k]&&val[k]!=num){
- k++;
- if(k==maxn) k = k-maxn;
- }
- if(!Hash[k]){
- Hash[k] = true;
- val[k] = num;
- idx[k] = id;
- }
- return;
- }
- long long found(long long num){
- long long k = num%maxn;
- while(Hash[k]&&val[k]!=num){
- k++;
- if(k==maxn) k-=maxn;
- }
- if(Hash[k]){
- return idx[k];
- }
- return -;
- }
- long long baby_step(long long a,long long b,long long n){
- long long temp =;
- long long i;
- for(i=;i<=;i++){
- if(temp==b%n) return i;
- temp = temp*a%n;
- }
- long long tmp,d =,cnt=;
- memset(Hash,false,sizeof(Hash));
- memset(val,-,sizeof(val));
- memset(idx,-,sizeof(idx));
- while((tmp=gcd(a,n))!=){
- if(b%tmp)
- return -;
- cnt++;
- n = n/tmp;
- b = b/tmp;
- d =d*a/tmp%n;
- }
- long long cur =;
- long long m = ceil(sqrt(n+0.5));
- for(i=;i<m;i++){
- Insert(i,cur);
- cur = cur*a%n;
- }
- long long x,y;
- for(i=;i<m;i++){
- ex_gcd(d,n,x,y);
- x = x*b%n;
- x = (x%n+n)%n;
- long long k = found(x);
- if(k!=-)
- return i*m+k+cnt;
- d = d*cur%n;
- }
- return -;
- }
- int main()
- {
- while(scanf("%I64d%I64d%I64d",&a,&n,&b)==){
- if(a==&&b==&&n==)
- break;
- long long res = baby_step(a,b,n);
- if(res==-){
- printf("No Solution\n");
- }else{
- printf("%I64d\n",res);
- }
- }
- return ;
- }
poj 3243 Clever Y 高次方程的更多相关文章
- POJ 3243 Clever Y (求解高次同余方程A^x=B(mod C) Baby Step Giant Step算法)
不理解Baby Step Giant Step算法,请戳: http://www.cnblogs.com/chenxiwenruo/p/3554885.html #include <iostre ...
- POJ 3243 Clever Y 扩展BSGS
http://poj.org/problem?id=3243 这道题的输入数据输入后需要将a和b都%p https://blog.csdn.net/zzkksunboy/article/details ...
- poj 3243 Clever Y && 1467: Pku3243 clever Y【扩展BSGS】
扩展BSGS的板子 对于gcd(a,p)>1的情况 即扩展BSGS 把式子变成等式的形式: \( a^x+yp=b \) 设 \( g=gcd(a,p) \) 那么两边同时除以g就会变成: \( ...
- POJ 3243 Clever Y(离散对数-拓展小步大步算法)
Description Little Y finds there is a very interesting formula in mathematics: XY mod Z = K Given X, ...
- [POJ 3243]Clever Y
Description Little Y finds there is a very interesting formula in mathematics: XY mod Z = K Given X, ...
- POJ 3243 Clever Y | BSGS算法完全版
题目: 给你A,B,K 求最小的x满足Ax=B (mod K) 题解: 如果A,C互质请参考上一篇博客 将 Ax≡B(mod C) 看作是Ax+Cy=B方便叙述与处理. 我们将方程一直除去A,C的最大 ...
- POJ 3243 Clever Y Extended-Baby-Step-Giant-Step
题目大意:给定A,B,C,求最小的非负整数x,使A^x==B(%C) 传说中的EXBSGS算法0.0 卡了一天没看懂 最后硬扒各大神犇的代码才略微弄懂点0.0 參考资料: http://quarter ...
- 【POJ】3243 Clever Y
http://poj.org/problem?id=3243 题意:求$a^y \equiv b \pmod{p}$最小的$y$.(0<=x, y, p<=10^9) #include & ...
- BZOJ 3243 Clever Y
Description Little Y finds there is a very interesting formula in mathematics: XY mod Z = K Given X, ...
随机推荐
- EF(ServerFirst)执行存储过程实例1(带输出参数)
1.不含动态sql.带输出参数存储过程调用实例 a.存储过程代码: b.EF自动生成代码(包括对应ObjectResult的实体模型): c.调用存储过程代码实例: 总结: ObjectParame ...
- 日期选择器——java
转载:http://zgdeng.iteye.com/blog/1405650 代码如下: import java.awt.BasicStroke; import java.awt.BorderLay ...
- MSSQL数库备份与还原脚本(多个库时很方便)
每次通过 Management Studio 的界面操作备份或还原数据库,对于单个数据库还好,要是一次要做多个.那就还是用脚本快些,下面有两段脚本分享一下. ===================== ...
- IO与文件读写---使用Apache commons IO包提高读写效率
觉得很不错,就转载了, 作者: Paul Lin 首先贴一段Apache commons IO官网上的介绍,来对这个著名的开源包有一个基本的了解:Commons IO is a library of ...
- 关于 WP上应用调试时报错“指定的通信资源(端口)”已由另一个应用程序使用 问题
问题来源 碰到这个问题是调试wp7项目的时候,之前因为安装的是wp8.0的sdk 包括wp7.5所以wp7的也能用,后来不知道怎么回事wp7项目就不能调试了总是显示启动而不是 device或者是虚拟机 ...
- java——String的那边破事
经典的先看下面一段代码,请问最终创建几个对象,分别在哪里? String s0 = new String("luoliang.me"); String s1 = "luo ...
- gmpy2安装使用方法
GMP(GNU Multiple Precision Arithmetic Library,即GNU高精度算术运算库),它是一个开源的高精度运算库,其中不但有普通的整数.实数.浮点数的高精度运算,还有 ...
- HDU 5763 Another Meaning(FFT)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5763 [题目大意] 给出两个串S和T,可以将S串中出现的T替换为*,问S串有几种表达方式. [题解 ...
- 重拾CSS基础—开篇
由来 从事软件行业一晃也5年有余,之间参与过若干个基于web的项目,所以javascript和Html基本已经相当熟悉,最近对于web前端开发比较关注,分析后发现CSS的确是自己的弱项,于是决定再加强 ...
- CSS 常用自定义样式
目录: 1. 文本单行显示,并对超出部分截断以省略号代替: 2.列布局或栅格布局:比如:左侧固定宽度,右侧占满剩下的宽度: 章节: 1. 文本单行显示,并对超出部分截断以省略号代替:参见以下代码: d ...