[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 Server是如何让定时作业
如果在SQL Server 里需要定时或者每隔一段时间执行某个存储过程或3200字符以内的SQL语句时,可以用管理->SQL Server代理->作业来实现. 1.管理->SQL S ...
- 关于count(1) 和 count(*)
Q:What is the difference between count(1) and count(*) in a sql queryeg.select count(1) from emp; an ...
- Unity3d 协程、调用函数、委托
(一)协程 开启方法:StartCoroutine("函数名"): 结束方法StopCoroutine("函数名"),StopAllCoroutines(); ...
- 【HDU2222】Keywords Search
Problem DescriptionIn the modern time, Search engine came into the life of everybody like Google, Ba ...
- ExtJS4.2学习(12)基于表格的右键菜单(转)
鸣谢:http://www.shuyangyang.com.cn/jishuliangongfang/qianduanjishu/2013-11-24/181.html --------------- ...
- The 6th Zhejiang Provincial Collegiate Programming Contest->ProblemF:80ers' Memory
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3207 题意:给出N个关键字符串,然后给出k行,每行Ni个字符串,找出每行有 ...
- 【更新链接】U盘启动制作工具(UDTOOL) v3.0.2014.0427
[校验值] 文件: UDTOOLV3_Setup.exe大小: 525 MB版本: 3.0.2014.0427时间: 2014年4月27日MD5: 2E5187B7D9081E8A69B4DC45C8 ...
- APP,webapp 设计相关资料汇集区
(1).@2x iPhone3GS时代,我们为一个应用提供图标(或按钮提供贴图),只需要icon.png.针对现在的iPhone4~6 Retina显示屏,需要制作额外的@2x高分辨率版本. 例如在i ...
- 文件结束符和C\C++读取文件方式
http://www.cnblogs.com/cvbnm/articles/2003056.html 约定编译器为 gcc2/x86: 所以 char, unsigned char 为 8 位, in ...
- HDMI介绍与流程
HDMI接口 http://baike.c114.net/view.asp?id=17671-21565442 DDC(Display Data Channel)通道用于HDMI发送和接收端之间交换一 ...