题目大意:找出T组不大于ni(i=1,2,3,...,T)的因子数最多的数mi(i=1,2,3,...,T),有多个数时输出最小的。

Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u

数据规模:1<=T=100,1<=ni(i=1,2,3,...,T)<=10^18。

理论基础:定理:如果:m=p1^k1*p2^k2*...那么:m的因子数=(k1+1)*(k2+1)*...。

题目分析:由定理可以知道,我们如果:(p1<p2<p3<...)且(k1>=k2>=k3>=...)且m不超过n,则m即为所求的解。

可知解为m不超过ns时素因子个数最多的情况下,小素数的指数尽可能多的情况,且达到最多素数时,假设,已知所有的素数的积为m,则问题转化为子结构:不超过n/m的情况下,求一个因子最多的最小数问题。这个我们直接深搜就可以了。

代码如下:

  1. #include<iostream>
  2. #include<cstdio>
  3. using namespace std;
  4. typedef long long LL;
  5. typedef long long unsigned LU;
  6. LU n,num,cnt;
  7. int T,p[17]={0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,51};
  8. void dfs(LU now,int dep,LU pdt,int bor)
  9. {
  10. LU i;
  11. int j,pdtt,t;
  12. if(dep==16)return;
  13. if(pdt>cnt||(pdt==cnt&&now<num))
  14. {
  15. num=now;
  16. cnt=pdt;
  17. }
  18. j=0,t=1,i=now;
  19. while(j<bor)
  20. {
  21. j++;
  22. t++;
  23. if(n/i<p[dep])break;
  24. pdtt=pdt*t;
  25. if(i<=n/p[dep])
  26. {
  27. i=i*p[dep];
  28. dfs(i,dep+1,pdtt,j);
  29. }
  30. else break;
  31. }
  32. }
  33.  
  34. int main()
  35. {
  36. scanf("%d",&T);
  37. while(T--)
  38. {
  39. scanf("%I64u",&n);
  40. if(n==1)
  41. {
  42. printf("1 1\n");
  43. continue;
  44. }
  45. num=1,cnt=1;
  46. dfs(1,1,1,60);
  47. printf("%I64u %I64d\n",num,cnt);
  48. }
  49. return 0;
  50. }

其中,dfs即为深搜的一个函数。可经过预先计算得知深度不会超过16所以我们将前16个素数处理出来,已经足够了。

参考文献:

http://baike.baidu.com/view/1780622.htm

by:Jsun_moon http://blog.csdn.net/Jsun_moon

URAL 1748的更多相关文章

  1. ural 1748 The Most Complex Number 和 丑数

    题目:http://acm.timus.ru/problem.aspx?space=1&num=1748 题意:求n范围内约数个数最多的那个数. Roughly speaking, for a ...

  2. URAL 1748. The Most Complex Number(反素数)

    题目链接 题意 :给你一个n,让你找出小于等于n的数中因子个数最多的那个数,并且输出因子个数,如果有多个答案,输出数最小的那个 思路 : 官方题解 : (1)此题最容易想到的是穷举,但是肯定超时. ( ...

  3. URAL 1748 The Most Complex Number

    题目链接:https://vjudge.net/problem/11177 题目大意: 求小于等于 n 的最大反素数. 分析: n <= 10^18,而前20个素数的乘积早超过10^18,因此可 ...

  4. 1060 最复杂的数(反素数玄学dfs)

    1060 最复杂的数 题目来源: Ural 1748 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 把一个数的约数个数定义为该数的复杂程度,给出一个n,求1-n中 ...

  5. 后缀数组 POJ 3974 Palindrome && URAL 1297 Palindrome

    题目链接 题意:求给定的字符串的最长回文子串 分析:做法是构造一个新的字符串是原字符串+反转后的原字符串(这样方便求两边回文的后缀的最长前缀),即newS = S + '$' + revS,枚举回文串 ...

  6. ural 2071. Juice Cocktails

    2071. Juice Cocktails Time limit: 1.0 secondMemory limit: 64 MB Once n Denchiks come to the bar and ...

  7. ural 2073. Log Files

    2073. Log Files Time limit: 1.0 secondMemory limit: 64 MB Nikolay has decided to become the best pro ...

  8. ural 2070. Interesting Numbers

    2070. Interesting Numbers Time limit: 2.0 secondMemory limit: 64 MB Nikolay and Asya investigate int ...

  9. ural 2069. Hard Rock

    2069. Hard Rock Time limit: 1.0 secondMemory limit: 64 MB Ilya is a frontman of the most famous rock ...

随机推荐

  1. [leetcode tree]101. Symmetric Tree

    Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For e ...

  2. Python进阶篇:Socket多线程

    1. 初识Socket server和clinet之间的交互方式 2. 客户端和服务端的单次交互 ==================================== 服务端 import soc ...

  3. 6.13校内互测 (DP 带权二分 斜率优化)

    丘中有麻plant 改自这儿,by ZBQ. 还有隐藏的一页不放了.. 直接走下去的话,如果开始时间确定那么到每个点的时间确定,把time减去dis就可以去掉路程的影响了. 这样对于减去d后的t,如果 ...

  4. UOJ 310 黎明前的巧克力(FWT)

    [题目链接] http://uoj.ac/problem/310 [题目大意] 给出一个数集,A从中选择一些数,B从中选择一些数,不能同时不选 要求两者选择的数异或和为0,问方案数 [题解] 题目等价 ...

  5. hdu 4557 暴力

    题意: 作为2013年699万应届毕业生中的一员,由于宏观经济的不景气,小明在毕业当天就华丽丽地失业了! 经历了千难万苦的求职过程,小明特别能理解毕业生的就业之难,所以,他现在准备创建一家专门针对IT ...

  6. android实现gif图播放、暂停、继续播放

    之前做过一个项目,在android上实现gif图的播放以及点击屏幕弹出窗口显示gif图片的暂停,之前一直用gifView的jar包实现gif图片的显示,但是在gif暂停.继续播放这块没有找到好的解决方 ...

  7. hdoj 4272 LianLianKan 数据太水

    LianLianKan Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  8. redux基础(1)

    redux ps:每个案例都是接着上一个案例写的 主要以案例讲解如何使用,具体概念请参考如下: 基本概念参考1 基本概念参考2 案例源码戳这里 一.Store.Action.Reducer简介 Sto ...

  9. angularjs-ui插件ui-select和html的select注意事项及区别

    项目中使用了angular-ui里的ui-select指令,地址https://github.com/angular-ui/ui-select 1. ng-model没有双向数据绑定 最开始没有看手册 ...

  10. blurImage做图片模糊处理报错free(): invalid next size

    $image = new Imagick($url); $image->blurImage($x, $y); 调用blurImage($x, $y)函数报错: 原因是:原来的图片是CMYK的是印 ...