poj2429:因数分解+搜索
题意:给定gcd(a,b)和lcm(a,b) 求使得a+b最小的 a,b
思路:结合算数基本定理中 gcd lcm的质因子表示形式
把lcm(a,b)质因数分解 以后 通过dfs找到 a+b最小的a b即可
#include <iostream>
#include<stdio.h>
#include<algorithm>
#include<math.h>
using namespace std;
long long fac[];
int nf;
long long a,b;
long long x,y;
long long mk;
long long ans1,ans2;
long long gcd(long long a,long long b)
{
return b?gcd(b,a%b):a;
}
long long random(long long n)
{
return (long long)(rand()%(n-)+);
}
long long multimod(long long a,long long b,long long m)//a*b%m
{
long long res=;
while(b>)
{
if(b&)
res=(res+a)%m;
b>>=;
a=(a<<)%m;
}
return res;
}
long long quickmod(long long a,long long b,long long m) //a^b%m
{
long long res=;
while(b>)
{
if(b&)
res=multimod(res,a,m);
b>>=;
a=multimod(a,a,m);
}
return res;
}
int check(long long a,long long n,long long x,long long t)
{
long long res=quickmod(a,x,n);
long long last=res;
for(int i=;i<=t;i++)
{
res=multimod(res,res,n);
if(res==&&last!=&&last!=n-) return ;
last=res;
}
if(res!=) return ;
return ;
} int primetest(long long n)
{
if(n<)return ;
if(n==)return ;
if((n&)==) return ;
long long x=n-;
long long t=;
while((x&)==){x>>=;t++;}
for(int i=;i<;i++)
{
long long a=random(n);
if(check(a,n,x,t))
return ;
}
return ;
} long long pollardrho(long long n,long long c)
{
long long x,y,d,i,k;
i=;k=;
x=random(n);
y=x;
while()
{
i++;
x=(multimod(x,x,n)+c)%n;
long long tmp=y-x>=?y-x:x-y;
d=gcd(tmp,n);
if(d>&&d<n)
return d;
if(y==x)
return n;
if(i==k)
{
y=x;
k+=k;
}
}
}
void findfac(long long n)
{
if(n==)
return;
if(primetest(n))
{
fac[nf++]=n;
return;
}
long long p=n;
while(p>=n)
p=pollardrho(n,random(n-));
findfac(p);
findfac(n/p);
}
void dfs(long long x,long long y,int s,long long pre)
{
while(fac[s]==pre&&(s<nf))
s++; //因子判重
if(s==nf)
{
if(x+y<mk)
{
mk=x+y;
ans1=x;
ans2=y;
}
return;
}
long long i=,j=;
long long a1=a,b1=b;
while(a1%fac[s]==)
{
a1/=fac[s];
}
while(b1%fac[s]==)
{
b1/=fac[s];
}
i=a/a1;
j=b/b1;
dfs(x*i,y*j,s+,fac[s]);
dfs(x*j,y*i,s+,fac[s]);
return;
}
int main()
{ while(scanf("%I64d %I64d",&a,&b)!=EOF)
{
nf=;
findfac(b);
mk=;
sort(fac,fac+nf);
dfs(,,,-);
if(ans1>ans2)
swap(ans1,ans2);
printf("%I64d %I64d\n",ans1,ans2);
}
}
poj2429:因数分解+搜索的更多相关文章
- 洛谷P1221 最多因子数 [搜索,数学]
题目传送门 最多因子数 目描述 数学家们喜欢各种类型的有奇怪特性的数.例如,他们认为945是一个有趣的数,因为它是第一个所有约数之和大于本身的奇数. 为了帮助他们寻找有趣的数,你将写一个程序扫描一定范 ...
- SQLSERVER走起微信公众帐号已经开通搜狗微信搜索
SQLSERVER走起微信公众帐号已经开通搜狗微信搜索 请打开下面链接 http://weixin.sogou.com/gzh?openid=oIWsFt-hiIb_oYqQHaBMoNwRB2wM ...
- solr_架构案例【京东站内搜索】(附程序源代码)
注意事项:首先要保证部署solr服务的Tomcat容器和检索solr服务中数据的Tomcat容器,它们的端口号不能发生冲突,否则web程序是不可能运行起来的. 一:solr服务的端口号.我这里的sol ...
- SQLServer地址搜索性能优化例子
这是一个很久以前的例子,现在在整理资料时无意发现,就拿出来再改写分享. 1.需求 1.1 基本需求: 根据输入的地址关键字,搜索出完整的地址路径,耗时要控制在几十毫秒内. 1.2 数据库地址表结构和数 ...
- HTML5轻松实现搜索框提示文字点击消失---及placeholder颜色的设置
在做搜索框的时候无意间发现html5的input里有个placeholder属性能轻松实现提示文字点击消失功能,之前还傻傻的在用js来实现类似功能... 示例 <form action=&quo ...
- bzoj1079--记忆化搜索
题目大意:有n个木块排成一行,从左到右依次编号为1~n.你有k种颜色的油漆,其中第i种颜色的油漆足够涂ci个木块.所有油漆刚好足够涂满所有木块,即c1+c2+...+ck=n.相邻两个木块涂相同色显得 ...
- bzoj3208--记忆化搜索
题目大意: 花花山峰峦起伏,峰顶常年被雪,Memphis打算帮花花山风景区的人员开发一个滑雪项目. 我们可以把风景区看作一个n*n的地图,每个点有它的初始高度,滑雪只能从高处往低处滑[严格大于] ...
- Android中通过ActionBar为标题栏添加搜索以及分享视窗
在Android3.0之后,Google对UI导航设计上进行了一系列的改革,其中有一个非常好用的新功能就是引入的ActionBar,他用于取代3.0之前的标题栏,并提供更为丰富的导航效果.Action ...
- 一步步开发自己的博客 .NET版(5、Lucenne.Net 和 必应站内搜索)
前言 这次开发的博客主要功能或特点: 第一:可以兼容各终端,特别是手机端. 第二:到时会用到大量html5,炫啊. 第三:导入博客园的精华文章,并做分类.(不要封我) 第四:做 ...
随机推荐
- appium windows 命令行中运行以及targetSdkVersionFromManifest failed的解决
启动appium服务,可以通过appium.exe可执行文件启动,也可以通过命令行启动.appium.exe启动需要通过安装可执行文件,命令行启动需要通过npm安装appium.可执行文件启动方式如下 ...
- jquery中的属性和css
jQuery中的属性用于获取或设置元素的属性 1.attr(),获取或设置所有相匹配的元素的属性值:removeAttr("attr"),移除所有相匹配的元素的属性 //html ...
- android requestDisallowInterceptTouchEvent用途
ViewPager来实现左右滑动切换tab.假设tab的某一项中嵌入了水平可滑动的View就会让你有些不爽,比方想滑动tab项中的可水平滑动的控件,却导致tab切换. 由于Android事件机制是从父 ...
- HashMap学习笔记
概述 HashMap是Map接口的一个哈希表的实现,内部是一个数组表示的.数组中的元素叫做一个Node,一个Node可以一个是一个简单的表示键值对的二元组,也可以是一个复杂的TreeNod ...
- Java基础知识强化34:String类之String类的转换功能
1. String类的转换功能 String[] split(String regex)//将字符串变成字符串数组(字符串切割) byte[] getBytes()//将字符串变成字节数组 char[ ...
- Tree( 树) 组件[2]
本节课重点了解 EasyUI 中 Tree(树)组件的使用方法, 这个组件依赖于 Draggable(拖动)和 Droppable(放置)组件.一. 异步加载如果想从数据库里获取导航内容, 那么就必须 ...
- HTML基础总结<文本格式>
HTML 文本格式化标签 标签 描述 <b> 定义粗体文本 <em> 呈现为被强调的文本 <i> 定义斜体字 <small> 定义小号字 <str ...
- Jquery JSOPN在WebApi中的问题
1. 客户端代码: $.ajax({ data: { name: 'zhangsan' }, url: apiUrl.getTwo('TestFourth'), dataType: 'jsonp', ...
- C#程序调用cmd执行命令(转)
C#通过程序来调用cmd命令的操作 string str = Console.ReadLine(); System.Diagnostics.Process p = new System.Diagnos ...
- memcached原理全面剖析
memcached会预先分配内存,memcached分配内存方式称之为allocator, 首先,这里有3个概念: 1 slab 2 page 3 chunk 一般来说一个memcahced进程会预先 ...