题意:求大于b的a的因数对有几组。例10  2结果为{2,5},12 2结果为{2,6}{3,4}-----不反复

解一:分解质因数+DFS

  1. #include <iostream>
  2. #include <string.h>
  3. #include <math.h>
  4. using namespace std;
  5. typedef long long ll;
  6. const int maxn=1000005;
  7. int prime[maxn];
  8. int num[maxn];
  9. int dig[200];
  10. int dignum[200];
  11. int p;
  12. void inti() //筛选素数
  13. {
  14. p=0;
  15. memset(prime,0,sizeof(prime));
  16. memset(num,0,sizeof(num));
  17. for(int i=2;i<maxn;i++)
  18. {
  19. if(!prime[i])
  20. {
  21. num[p++]=i;
  22. for(int j=2;j*i<maxn;j++)
  23. prime[i*j]=1;
  24. }
  25. }
  26. return ;
  27. }
  28. ll pp;
  29. void dfs(ll tot,int t,int l,ll a,ll b) //dfs找到全部符合的因数
  30. {
  31. if(((double)tot*tot)>=a)
  32. return ;
  33. if(tot>=b)
  34. pp++;
  35. for(int i=t;i<l;i++)
  36. {
  37. if(dig[i])
  38. {
  39. ll temp=tot*dignum[i];
  40. if(((double)temp*temp)>=a)
  41. return ;
  42. dig[i]--;
  43. dfs(temp,i,l,a,b);
  44. dig[i]++;
  45. }
  46. }
  47. return ;
  48. }
  49. int main()
  50. {
  51. ll a,b;
  52. int t;
  53. inti();
  54. while(cin>>t)
  55. {
  56. for(int i=1;i<=t;i++)
  57. {
  58. pp=0;
  59. cin>>a>>b;
  60. double limit=sqrt(a*1.0);
  61. if(b>=limit)
  62. {
  63. cout<<"Case "<<i<<": 0"<<endl;
  64. continue;
  65. }
  66. ll temp=a;
  67. int j=0;
  68. int time=0;
  69. while(j<=p) //全部的质因数
  70. {
  71. if((ll)num[j]*num[j]>temp) //小小的剪枝
  72. break;
  73. int flag=0;
  74. while(!(temp%num[j]))
  75. {
  76. temp/=num[j];
  77. flag++;
  78. }
  79. if(flag)
  80. {
  81. dignum[time]=num[j];
  82. dig[time++]=flag;
  83. }
  84. j++;
  85. }
  86. if(temp!=1)
  87. {
  88. dignum[time]=temp;
  89. dig[time++]=1;
  90. }
  91. /*for(j=0;j<time;j++)
  92. cout<<dignum[j]<<" "<<dig[j]<<endl;*/
  93. dfs(1,0,time,a,b);
  94. cout<<"Case "<<i<<": "<<pp<<endl;
  95. }
  96. }
  97. return 0;
  98. }

解二:直接计算

  1. #include <iostream>
  2. #include <string.h>
  3. #include <math.h>
  4. using namespace std;
  5. typedef long long ll;
  6. const int maxn=1000005;
  7. int prime[maxn];
  8. int num[maxn];
  9. int dig[200];
  10. int dignum[200];
  11. int p;
  12. void inti() //找素数
  13. {
  14. p=0;
  15. memset(prime,0,sizeof(prime));
  16. memset(num,0,sizeof(num));
  17. for(int i=2;i<maxn;i++)
  18. {
  19. if(!prime[i])
  20. {
  21. num[p++]=i;
  22. for(int j=2;j*i<maxn;j++)
  23. prime[i*j]=1;
  24. }
  25. }
  26. return ;
  27. }
  28. /*ll pp;
  29. void dfs(ll tot,int t,int l,ll a,ll b)
  30. {
  31. if(((double)tot*tot)>=a)
  32. return ;
  33. if(tot>=b)
  34. pp++;
  35. for(int i=t;i<l;i++)
  36. {
  37. if(dig[i])
  38. {
  39. ll temp=tot*dignum[i];
  40. if(((double)temp*temp)>=a)
  41. return ;
  42. dig[i]--;
  43. dfs(temp,i,l,a,b);
  44. dig[i]++;
  45. }
  46. }
  47. return ;
  48. }*/
  49. int main()
  50. {
  51. ll a,b;
  52. int t;
  53. inti();
  54. ll sum;
  55. while(cin>>t)
  56. {
  57. for(int i=1;i<=t;i++)
  58. {
  59. sum=1;
  60. cin>>a>>b;
  61. if(((double)b*b)>=a)
  62. {
  63. cout<<"Case "<<i<<": 0"<<endl;
  64. continue;
  65. }
  66. ll temp=a;
  67. int j=0;
  68. int time=0;
  69. while(j<=p)
  70. {
  71. if((double)num[j]*num[j]>temp)
  72. break;
  73. int flag=0;
  74. while(!(temp%num[j]))
  75. {
  76. temp/=num[j];
  77. flag++;
  78. }
  79. sum*=(flag+1); //排列组合。把全部的情况拿出来
  80. j++;
  81. }
  82. if(temp!=1)
  83. {
  84. sum*=2; //还有没除尽的要给全部可能性乘2
  85. }
  86. sum/=2; //直接除2,把反复的部分和正方形除去了
  87. ll limit=sqrt(a*1.0);
  88. for(j=1;j<b;j++) //去掉不符合要求的矩形
  89. if(!(a%j))
  90. sum--;
  91. /*for(j=0;j<time;j++)
  92. cout<<dignum[j]<<" "<<dig[j]<<endl;*/
  93. //dfs(1,0,time,a,b);
  94. cout<<"Case "<<i<<": "<<sum<<endl;
  95. }
  96. }
  97. return 0;
  98. }

第一种方法easy爆站。另外一种方法算是凑着它数据的b偏小才这么做的,两种方法个人感觉差点儿相同,希望各位大牛指正。

Light OJ 1341 Aladdin and the Flying Carpet的更多相关文章

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

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

  2. LightOJ 1341 - Aladdin and the Flying Carpet (唯一分解定理 + 素数筛选)

    http://lightoj.com/volume_showproblem.php?problem=1341 Aladdin and the Flying Carpet Time Limit:3000 ...

  3. 1341 - Aladdin and the Flying Carpet ---light oj (唯一分解定理+素数筛选)

    http://lightoj.com/volume_showproblem.php?problem=1341 题目大意: 给你矩形的面积(矩形的边长都是正整数),让你求最小的边大于等于b的矩形的个数. ...

  4. LOJ 1341 Aladdin and the Flying Carpet(质因子分解)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1341 题意:给两个数a,b,求满足c * d = a且c>=b且d>=b的 ...

  5. [LightOJ 1341] Aladdin and the Flying Carpet (算数基本定理(唯一分解定理))

    题目链接: https://vjudge.net/problem/LightOJ-1341 题目描述: 问有几种边长为整数的矩形面积等于a,且矩形的短边不小于b 算数基本定理的知识点:https:// ...

  6. LightOJ 1341 Aladdin and the Flying Carpet(唯一分解定理)

    http://lightoj.com/volume_showproblem.php?problem=1341 题意:给你矩形的面积(矩形的边长都是正整数),让你求最小的边大于等于b的矩形的个数. 思路 ...

  7. LightOJ 1341 - Aladdin and the Flying Carpet 基本因子分解

    http://www.lightoj.com/volume_showproblem.php?problem=1341 题意:给你长方形的面积a,边最小为b,问有几种情况. 思路:对a进行素因子分解,再 ...

  8. LightOJ 1341 - Aladdin and the Flying Carpet

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1341 题意:给你地毯面积和最小可能边的长度,让你求有几种组合的可能. 题解:这题就厉害 ...

  9. LightOJ 1341 Aladdin and the Flying Carpet【整数分解】

    题目链接: http://lightoj.com/login_main.php?url=volume_showproblem.php?problem=1341 题意: 给定一个数,将其拆分成两个数的乘 ...

随机推荐

  1. CDR X6三折促销活动,可入

    继CDR X6双十二限量活动之后,CorelDRAW官方为庆祝2018新年新气象,折扣狂潮,又来一波.上次活动由于时间短,任务急,数量少,使得不少小伙伴抱憾而止,选择默默等待良机.现在,良机来了,即便 ...

  2. nodejs 封装mysql连接池

    写在前面的 在nodejs后台代码中,我们总是会和数据库打交道 然而,每次都要写数据库的配置以及连接和断开,不胜其烦 我就封装了一个连接池模块,不足之处还请多多批评 上代码 一下是写在mysqls.j ...

  3. 登录生成令牌token存于redis

    package com.medic.rest.province.base.home; import java.util.HashMap;import java.util.List;import jav ...

  4. (2016北京集训十二)【xsy1542】疯狂求导

    题解: 这题看起来很难...但是实际上并没有想象中的那么难 第一眼看上去不会求导公式怎么办?不要紧,题目背景非常良心的给出了题目中的导数计算公式 求完导合并同类项很恶心怎么办?不要紧,样例解释说明了不 ...

  5. Linux Eslint 命令行

    Linux 命令行 ls : 查看所有文件 ls -la : 编列文件并展示权限 sudo chmod 777 -R   文件名  : 文件权限升级 cp : 复制      cp   file_na ...

  6. POJ1743Musical Theme(后缀数组+二分)

    题意 有N(1 <= N <=20000)个音符的序列来表示一首乐曲,每个音符都是1..88范围内的整数,现在要找一个重复的主题.“主题”是整个音符序列的一个子串,它需要满足如下条件: 1 ...

  7. dropload上拉加载 下拉刷新

    1.引入css.js <link rel="stylesheet" href=" ${pageContext.request.contextPath}/dist/d ...

  8. python学习(二):基本数据类型:整型,字符型

    整型: type():显示数据类型 # 整型,int # python3里,不管数字有多大,都是int类型 # python2里,有大小区分,长整型:long int a = " print ...

  9. ASP.NET-缓存基本知识点

    asp.net cache是一种缓存技术,然而,我们在asp.net程序中还可以使用其他的缓存技术,这些不同的缓存也各有所长.由于asp.net cache不能提供对外访问能力,因此,它不可能取代以m ...

  10. 洛谷 P1193 洛谷团队训练VS传统团队训练

    P1193 洛谷团队训练VS传统团队训练 题目背景 “在中学的信息学教育领域,洛谷无疑是一个相当受欢迎的辅助网站.同时有百余所学校正在通过洛谷进行信息学竞赛(以后简称OI)的教育.洛谷之所以如此受欢迎 ...