[POJ 2429] GCD & LCM Inverse
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 10621 | Accepted: 1939 |
Description
Input
Output
Sample Input
- 3 60
Sample Output
- 12 15
Source
- #include <iostream>
- #include <cstdio>
- #include <cstdlib>
- #include <algorithm>
- #include <cmath>
- #include <ctime>
- using namespace std;
- #define INF 0x3f3f3f3f3f3f3f3f
- #define ll long long
- #define S 8
- ll mult(ll a,ll b,ll mod)
- {
- a%=mod,b%=mod;
- ll ret=;
- while(b)
- {
- if(b&)
- {
- ret+=a;
- if(ret>=mod) ret-=mod;
- }
- a<<=;
- if(a>=mod) a-=mod;
- b>>=;
- }
- return ret;
- }
- ll pow(ll a,ll n,ll mod)
- {
- a=a%mod;
- ll ret=;
- while(n)
- {
- if(n&) ret=mult(ret,a,mod);
- a=mult(a,a,mod);
- n>>=;
- }
- return ret;
- }
- bool check(ll a,ll n,ll x,ll t)
- {
- ll ret=pow(a,x,n),last=ret;
- for(int i=;i<=t;i++)
- {
- ret=mult(ret,ret,n);
- if(ret== && last!= && last!=n-) return ;
- last=ret;
- }
- if(ret!=) return ;
- return ;
- }
- bool Miller_Rabin(ll n)
- {
- if(n<) return ;
- if(n==) return ;
- if((n&)==) return ;
- ll x=n-,t=;
- while((x&)==) { x>>=;t++;}
- srand(time(NULL));
- for(int i=;i<S;i++)
- {
- ll a=rand()%(n-)+;
- if(check(a,n,x,t)) return ;
- }
- return ;
- }
- int tot;
- ll factor[];
- ll gcd(ll a,ll b)
- {
- ll t;
- while(b)
- {
- t=a;
- a=b;
- b=t%b;
- }
- if(a>=) return a;
- return -a;
- }
- ll pollard_rho(ll x,ll c)
- {
- ll i=,k=;
- srand(time(NULL));
- ll x0=rand()%(x-)+;
- ll y=x0;
- while()
- {
- i++;
- x0=(mult(x0,x0,x)+c)%x;
- ll d=gcd(y-x0,x);
- if(d!= && d!=x) return d;
- if(y==x0) return x;
- if(i==k) y=x0,k+=k;
- }
- }
- void FindFac(ll n,int k=)
- {
- if(n==) return;
- if(Miller_Rabin(n))
- {
- factor[tot++]=n;
- return;
- }
- ll p=n;
- int c=k;
- while(p>=n) p=pollard_rho(p,c--);
- FindFac(p,k);
- FindFac(n/p,k);
- }
- ll ansx,ansy,ans;
- void dfs(int k,ll x,ll y)
- {
- if(k>=tot)
- {
- if(x+y<ans)
- {
- ans=x+y;
- ansx=x;
- ansy=y;
- }
- return;
- }
- dfs(k+,x*factor[k],y);
- dfs(k+,x,y*factor[k]);
- }
- int main()
- {
- int i,j;
- ll n,m;
- while(scanf("%lld%lld",&m,&n)!=EOF)
- {
- tot=;
- ans=INF; //注意初始化
- FindFac(n/m,);
- sort(factor,factor+tot);
- for(i=j=;i<tot;i++)
- {
- ll tmp=factor[i];
- while(i+<tot && factor[i]==factor[i+]) //注意边界
- {
- tmp*=factor[i];
- i++;
- }
- factor[j++]=tmp;
- }
- tot=j;
- dfs(,,);
- if(ansx>ansy) swap(ansx,ansy);
- printf("%lld %lld\n",ansx*m,ansy*m);
- }
- return ;
- }
[POJ 2429] GCD & LCM Inverse的更多相关文章
- POJ 2429 GCD & LCM Inverse(Pollard_Rho+dfs)
[题目链接] http://poj.org/problem?id=2429 [题目大意] 给出最大公约数和最小公倍数,满足要求的x和y,且x+y最小 [题解] 我们发现,(x/gcd)*(y/gcd) ...
- POJ 2429 GCD & LCM Inverse (Pollard rho整数分解+dfs枚举)
题意:给出a和b的gcd和lcm,让你求a和b.按升序输出a和b.若有多组满足条件的a和b,那么输出a+b最小的.思路:lcm=a*b/gcd lcm/gcd=a/gcd*b/gcd 可知a/gc ...
- POJ 2429 GCD & LCM Inverse(Miller-Rabbin素性测试,Pollard rho质因子分解)
x = lcm/gcd,假设答案为a,b,那么a*b = x且gcd(a,b) = 1,因为均值不等式所以当a越接近sqrt(x),a+b越小. x的范围是int64的,所以要用Pollard_rho ...
- POJ:2429-GCD & LCM Inverse(素数判断神题)(Millar-Rabin素性判断和Pollard-rho因子分解)
原题链接:http://poj.org/problem?id=2429 GCD & LCM Inverse Time Limit: 2000MS Memory Limit: 65536K To ...
- poj 2429 GCD & LCM Inverse 【java】+【数学】
GCD & LCM Inverse Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9928 Accepted: ...
- Mathematics:GCD & LCM Inverse(POJ 2429)
根据最大公约数和最小公倍数求原来的两个数 题目大意,不翻译了,就是上面链接的意思. 具体思路就是要根据数论来,设a和b的GCD(最大公约数)和LCM(最小公倍数),则a/GCD*b/GCD=LCM/G ...
- POJ2429 GCD & LCM Inverse pollard_rho大整数分解
Given two positive integers a and b, we can easily calculate the greatest common divisor (GCD) and t ...
- 【poj 2429】GCD & LCM Inverse (Miller-Rabin素数测试和Pollard_Rho_因数分解)
本题涉及的算法个人无法完全理解,在此提供两个比较好的参考. 原理 (后来又看了一下,其实这篇文章问题还是有的……有时间再搜集一下资料) 代码实现 #include <algorithm> ...
- poj2429 GCD & LCM Inverse
用miller_rabin 和 pollard_rho对大数因式分解,再用dfs寻找答案即可. http://poj.org/problem?id=2429 #include <cstdio&g ...
随机推荐
- (转载)SQL语句,纵列转横列
SQL语句,纵列转横列 Feed: 大富翁笔记 Title: SQL语句,纵列转横列 Author: wzmbox Comments sTable.db库位 货物编号 库存数1 0101 501 01 ...
- 【Python笔记】异常处理
1 什么是异常 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行.一般情况下,在Python无法正常处理程序时就会发生一个异常.异常是Python对象,表示一个错误. 当Pytho ...
- 奖学金评分系统(系统分析与设计版与Delphi实现代码)
一.系统规划 1.1 项目背景介绍 在奖学金评比过程中,学生综合测评是学校普遍采用的评比手段.对学生实施综合素质测评的目的在于正确评价学生的综合素质,为评奖学金提供依据,实现学生教育管理工作的标准化. ...
- NYOJ 994 海盗分金 逆向递推
链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=994 题意: 有n个海盗劫得了窖藏的m块金子,并准备瓜分这些战利品.按照古老流传下来的分金法则 ...
- 2016 系统设计第一期 (档案一)MVC 引用 js css
@Styles.Render("~/Bootstrap/css/bootstrap-theme.css") @Scripts.Render("~/jQuery/jquer ...
- DNF技能贴图的研究
一直在猜想DNF的技能贴图怎么贴的,靠在游戏里慢慢移动确定技能的偏移太费时间了.前段发现了“可视坐标生成”这软件,针对DNF改衣服,装备款式的小工具,就自己写了个类似的. 从图上看,技能的域中心点和人 ...
- 利用JQuery的$.ajax()可以很方便的调用asp.net的后台方法
利用JQuery的$.ajax()可以很方便的调用asp.net的后台方法. 先来个简单的实例热热身吧. 1.无参数的方法调用 asp.net code: view plaincopy to clip ...
- Ubuntu Linux启用root用户登录
Ubuntu Linux有一个与众不同的特点,那就是初次使用时,你无法作为root来登录系统,为什么会这样?这就要从系统的安装说起.对于其他Linux系统来 说,一般在安装过程就设定root密码,这样 ...
- Xcode常用快捷键及代码格式刷(缩进)方法-b
Xcode版本:4.5.1 一.总结的常用命令: 隐藏xcode command+h 退出xcode command+q 关闭窗口 command+w 关闭所有窗口 command+option+w ...
- iOS 支付宝应用(备用参考2)
接入前期准备工作包括商户签约和密钥配置 步骤1: 启动IDE(如Xcode),把iOS包中的压缩文件中以下文件拷贝到项目文件夹下, 并导入到项目工程中. AlipaySDK.bundle Al ...