//Accepted    172 KB    172 ms
 //该程序为随机性算法,运行时间不定
 #include <cstdio>
 #include <cstring>
 #include <iostream>
 #include <ctime>
 #include <algorithm>
 using namespace std;
 ],factor_top=-;
 //gcd
 long long gcd(long long a,long long b)
 {
     ) return a;
     return gcd(b,a%b);
 }
 //a*b%n n<2^62
 long long mult_mod(long long a,long long b,long long n)
 {
     ;
     while (b)
     {
         )
         {
             res+=exp;
             if (res>n) res-=n;
         }
         exp<<=;
         if (exp>n) exp-=n;
         b>>=;
     }
     return res;
 }
 //return a^b%n
 long long exp_mod(long long a,long long b,long long n)
 {
     ,exp=a%n;
     )
     {
         )
         {
             res=mult_mod(res,exp,n);
         }
         exp=mult_mod(exp,exp,n);
         b>>=;
     }
     return res;
 }
 //miller_rabin 算法进行素数判定
 //判断次数times次 一般取times=10
 //return true 则n为素数
 bool miller_rabin(long long n,long long times)
 {
     ) return true;
      || !(n&)) return false;
     ,x,y;
     ;
     ==)
     {
        t++;
        u/=;
     }
     srand(time());
     ;i<times;i++)
     {
         a=rand()%(n-)+;
         x=exp_mod(a,u,n);
         ;j<t;j++)
         {
             y=mult_mod(x,x,n);
              && x!= && x!=n-)
             return false; //not prime
             x=y;
         }
         ) return false;
     }
     return true;
 }
 //pollar_rho 求n的一个质因子
 //c 为测试函数中的常数
 long long pollard_rho(long long n,int c)
 {
     ,k=;
     srand(time());
     x=rand()%(n-)+;
     y=x;
     while (true)
     {
          i++;
          x=(mult_mod(x,x,n)+c)%n;
          d=gcd(y-x,n);
           && d<n) return d;
          if (y==x) return n;
          if (i==k)
          {
              y=x;
              k<<=;
          }
     }
 }
 //找出n的所用质因子
 void findFactor(long long n,int c)
 {
     ) return ;
     ))
     {
         factor[++factor_top]=n;
         return ;
     }
     long long p=n;
     while (p>=n)
     {
         p=pollard_rho(p,c--);
     }
     findFactor(p,c);
     findFactor(n/p,c);
 }
 ];
 int m;
 int cmp(long long a,long long b)
 {
     return a>b;
 }
 void slove()
 {
     sort(factor,factor+factor_top+,cmp);
     m=;
     a[]=factor[];
     ;i<factor_top;i++)
     {
         ])
         {
             a[m]*=factor[i];
         }
         else
         {
             m++;
             a[m]=factor[i+];
         }
     }
 }
 long long minx,ans;
 void dfs(int s,long long num,long long t)
 {
     )
     {
          || (num+t/num<minx))
         {
             minx=num+t/num;
             ans=num;
         }
         return ;
     }
     dfs(s+,a[s]*num,t);
     dfs(s+,num,t);
 }
 int main()
 {
     __int64 s,t,n;
     while (scanf("%I64d%I64d",&s,&t)!=EOF)
     {
         n=t/s;
         if (s==t)
         {
             printf("%I64d %I64d\n",s,t);
             continue;
         }
         //printf("%I64d\n",gcd(t,s));
         factor_top=-;
         findFactor(n,);
         //printf("findFactor()\n");
         m=;
         slove();
         //printf("slove()\n");
         minx=-;
         dfs(,,n);
         //printf("dfs()\n");
         if (ans>n/ans) ans=n/ans;
         printf("%I64d %I64d\n",ans*s,n/ans*s);
     }
     ;
 }

poj2429 大数分解+dfs的更多相关文章

  1. poj1181 大数分解

    //Accepted 164 KB 422 ms //类似poj2429 大数分解 #include <cstdio> #include <cstring> #include ...

  2. HDU4344(大数分解)

    题目:Mark the Rope 题意就是给一个数,然后求这个数的所有因子中组成的最大的一个子集,其中1和本身除外,使得在这个子集中元素两两互素,求最大子集的元素个 数,并且求出和最大的值. 找规律就 ...

  3. poj 1811 随机素数和大数分解(模板)

    Sample Input 2 5 10 Sample Output Prime 2 模板学习: 判断是否是素数,数据很大,所以用miller,不是的话再用pollard rho分解 miller : ...

  4. Pollard_Rho大数分解模板题 pku-2191

    题意:给你一个数n,  定义m=2k-1,   {k|1<=k<=n},并且 k为素数;  当m为合数时,求分解为质因数,输出格式如下:47 * 178481 = 8388607 = ( ...

  5. 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 ...

  6. poj 2429 Pollard_rho大数分解

    先对lcm/gcd进行分解,问题转变为从因子中选出一些数相乘,剩下的数也相乘,要求和最小. 这里能够直接搜索,注意一个问题,因为同样因子不能分配给两边(会改变gcd)所以能够将同样因子合并,这种话,搜 ...

  7. Light OJ 1341 Aladdin and the Flying Carpet Pollard_rho整数分解+DFS

    进入a b 多少努力p, q 使p*q == a && p < q && p >= b 直接大整数分解 然后dfs所有可能的解决方案劫持 #include ...

  8. 1400 序列分解(dfs)

    1400 序列分解 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 小刀和大刀是双胞胎兄弟.今天他们玩一个有意思的游戏. 大刀给小刀准备了一个长度为n的整数序列.小 ...

  9. poj 1811 大数分解

    模板 #include<stdio.h> #include<string.h> #include<stdlib.h> #include<time.h> ...

随机推荐

  1. 【bzoj1791】岛屿

    [bzoj1791]岛屿 题意 求基环树的直径. \(n\leq 100000\) 分析 这道题的题解貌似很少啊. 所以自己也写一份吧. 首先找出基环树的环. 那么树的直径有两种情况: ①以环为根的某 ...

  2. 20145218 《Java程序设计》第04次实验报告

    北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1452 指导教师:娄嘉鹏 实验日期:2016.04.22 实验名称:Android开发基础 一.实验内容 1.基于Android ...

  3. CentOS下更新python版本

    执行#Python或#python -V或#python --version,看到版本号是2.7.5,到官网https://www.python.org/ftp/python/查看了下最新版本都到了2 ...

  4. OpenGL 简介

    OpenGL是一个底层图形库规范.它为程序员提供了一个小的几何图元(点.线.多边形.图片和位图)库和一个支持2D/3D几何对象绘图命令库,通过所提供的图元和命令来控制对象的呈现(绘图). 由于Open ...

  5. UNIX高级环境编程学习

    1-5实例 控制字符:ctrl + 另一个键.control + D或者^D是默认的文件结束符(EOF字符).

  6. case when 对某个字段值分类讨论

    SELECT SM_ID,SM_CID,SM_STATION,SM_TIME,PS_CODE,PS_NUMBER,SS_NAME,SS_CODE, ( THEN '中转站' END) FROM dbo ...

  7. [转载]ME51n,ME52n,ME53n屏幕增强

    原文地址:ME51n,ME52n,ME53n屏幕增强作者:cyzhang811 http://blog.sina.com.cn/s/blog_721b218c0100zch9.html 使用增强:ME ...

  8. noip知识点总结之--贪心

    一.什么是贪心 贪心算法嘛... 就是在对某个问题求解时,总是做出在当前看来是最好的选择 In other wors,并不是从整体最优上加以考虑,而是在获得某种意义上的局部最优解 二.贪心算法的适用前 ...

  9. 使用HTTP访问网络------使用HTTPURLConnection

    HTTPURLConnection继承了URLConnection,因此也可用于向指定网站发送GET请求.POST请求.它在URLConnection的基础上提供了如下便捷的方法: 1.int  ge ...

  10. [转载]java NIO详解

    Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API.下面的文章写的很详细,还配有插图,有助于深入学习和理解java NIO 文 ...