题意:

ttt 组数据,第一个给定飞毯的面积为 sss,第二个是毯子的最短的边的长度大于等于这个数,毯子是矩形但不是正方形。

思路:

求出 sss 的所有因子,因为不可能是矩形,所以可以除以 222,最后暴力求出最短边长以内的因子,相减得出答案。

想要求出s以内的因子数量,就用到了唯一分解定理,先求素数想要求出s以内的因子数量,就用到了唯一分解定理,先求素数想要求出s以内的因子数量,就用到了唯一分解定理,先求素数

唯一分解定理:

任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积N=P1a1 P2a2 P3a3 … Pnan,这里P1<P2<P3…<Pn均为质数,其中指数ai是正整数。这样的分解称为 N 的标准分解式

(1)一个大于1的正整数N,如果它的标准分解式为:N=P1a1 P2a2 P3a3 … Pnan ,那么它的正因数个数为 sum=(1+a1)(1+a2)(1+a3)(1+an)。

(2) 它的全体正因数之和为 (1+p11+p12+…+p1a1)(1+p21+p22+…+p2a2)(1pn1+pn2+…+pnan)。

LightOJ1220:LightOJ 1220:LightOJ1220: x=bp,求出最大的 p 可以是几?(LightOJ 1220 Mysterious Bacteria)

即求出 x的标准分解式中的所有a的最大公约数。

  1. //LightOJ - 1341
  2. #include<stdio.h>
  3. #include<math.h>
  4. #include<vector>
  5. using namespace std;
  6. int main()
  7. {
  8. int t,z=1;
  9. bool book[1000910]= {0};
  10. long long s,l;
  11. vector<int>v;
  12. for(int i=2; i<=1000010; i++)
  13. if(!book[i])
  14. for(int j=i*2; j<=1000010; j=j+i)
  15. book[j]=1;
  16. for(int i=2; i<=1000008; i++)
  17. if(!book[i])
  18. v.push_back(i);
  19. scanf("%d",&t);
  20. while(t--)
  21. {
  22. scanf("%lld%lld",&s,&l);
  23. if(l>=sqrt(s))
  24. {
  25. printf("Case %d: 0\n",z++);
  26. continue;
  27. }
  28. long long sum=0;
  29. for(long long i=1; i<l; i++)
  30. if(s%i==0)
  31. sum++;
  32. long long i=0,ans=1;
  33. while(i<v.size()&&v[i]<s)//素数小于 s
  34. {
  35. int tt=0;
  36. while(s%v[i]==0)
  37. {
  38. tt++;
  39. s=s/v[i];
  40. }
  41. ans=ans*(1+tt);//(1+a1)*(1+a2)*(1+a3)*.....*(1+an) //因子的数量
  42. i++;
  43. }
  44. if(s>1)//若s>1,则为素数
  45. ans=ans*2;
  46. ans=ans/2;//几对素数
  47. printf("Case %d: %lld\n",z++,ans-sum);
  48. }
  49. return 0;
  50. }
  1. //LightOJ 1220
  2. #include<string.h>
  3. #include<vector>
  4. #include<stdio.h>
  5. using namespace std;
  6. int gcd(int a,int b)//求最大公约数
  7. {
  8. return a%b==0?b:gcd(b,a%b);//辗转相除法
  9. }
  10. int main()
  11. {
  12. vector<int>v;
  13. bool book[1010000];
  14. memset(book,0,sizeof(book));
  15. book[1]=1;
  16. for(int i=2; i<=1000100; i++)//素数筛
  17. if(!book[i])
  18. {
  19. v.push_back(i);//储存素数
  20. for(int j=i*2; j<=1000100; j=j+i)
  21. book[j]=1;
  22. }
  23. int t,z=1,flag=0;
  24. long long n;
  25. scanf("%d",&t);
  26. while(t--)
  27. {
  28. flag=0;
  29. scanf("%lld",&n);
  30. if(n<0)
  31. {
  32. n=n*-1;
  33. flag=1;
  34. }
  35. int ans=0;
  36. for(int i=0; i<v.size()&&v[i]*v[i]<=n; i++)
  37. {
  38. if(n%v[i]==0)
  39. {
  40. int tt=0;
  41. while(n%v[i]==0)
  42. {
  43. n=n/v[i];
  44. tt++;
  45. }
  46. if(ans==0)//第一次求最大公约数
  47. ans=tt;
  48. else
  49. ans=gcd(ans,tt);// x=b^p p=gcd(a1,a2,a3...,an)
  50. }
  51. }
  52. if(n > 1)//存在n>1时 指数的最大公约数为1 n此时为素数
  53. ans = gcd(ans, 1);
  54. if(flag == 1)
  55. {
  56. while(ans % 2 == 0)
  57. ans >>= 1;
  58. }
  59. printf("Case %d: %d\n",z++,ans);
  60. }
  61. return 0;
  62. }

LightOJ - 1341 Aladdin and the Flying Carpet 唯一分解定理LightOJ 1220Mysterious Bacteria的更多相关文章

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

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

  2. LightOJ1341 Aladdin and the Flying Carpet —— 唯一分解定理

    题目链接:https://vjudge.net/problem/LightOJ-1341 1341 - Aladdin and the Flying Carpet    PDF (English) S ...

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

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

  4. LightOJ 1341 Aladdin and the Flying Carpet 数学

    题意:给个矩形的面积a,和矩形的最小边长b,问有多少种矩形的方案(不能是正方形) 分析:a可以写成x,y,因为不能是正方形,所以设x<y,那么x<sqrt(a),y>sqrt(a) ...

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

  7. LightOJ 1341 - Aladdin and the Flying Carpet

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

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

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

  9. LightOJ 1341 Aladdin and the Flying Carpet 算数基本定理

    题目大意:给出面积n,和最短边m,求能形成的矩形的个数(不能为正方形). 题目思路:根据算数基本定理有: 1.每个数n都能被分解为:n=p1^a1*p2^a2*^p3^a3……pn^an(p为素数); ...

随机推荐

  1. 【开发技巧】再见,BLE的那些坑!

    蓝牙,平常你用的多吗?上班路上戴着蓝牙耳机听音乐.看视频打开蓝牙分享个人热点给小伙伴们解锁共享单车时,打开蓝牙就能迅速解锁...... BLE-蓝牙低能耗技术,方便了我们的生活,但是开发者在开发过程中 ...

  2. React拖拽组件Dragact V0.1.7:教你优化React组件性能与手感

    仓库地址:Dragact手感丝滑的拖拽布局组件 预览地址:支持手机端噢- 上回我们说到,Dragact组件已经进行了一系列的性能优化,然而面对大量数据的时候,依旧比较吃力,让我们来看看,优化之前的Dr ...

  3. HTML常用标签的使用

    一.常见标签详解 1.<iframe>标签 HTML内联框架元素 <iframe> 表示嵌套的浏览上下文,有效地将另一个HTML页面嵌入到当前页面中.在HTML 4.01中,文 ...

  4. Linq的整型或实体类null引发的报错问题

    经常在程序中遇到两个空值报错问题: 问题1:int类型如果为不可空,假如传进去null,会报错 问题2:EF的获得单个实体的Model如果为空,那么后面如果跟上属性会报错 解决问题1: 一般属性都设为 ...

  5. mysql从5.5升级到5.7遇到的坑

    在安装mysql5.7时很顺利安装完成,但在启动项目时报错: [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clau ...

  6. OpenWrt tcpdump 抓包

    路由器用的是 网件的 4300 刷的是石像鬼双固件 1, 安装支持库opkg updateopkg install libpcapopkg install tcpdump 2, 设置条件开始捕获tcp ...

  7. ubuntu16.04 + caffe + SSD + gpu 安装

    昨天我们买好了硬件,今天我们开始安装caffe了,我本人安装过caffe不下10次,每次都是一大堆问题,后来终于总结了关键要点,就是操作系统. 1. 千万不要用ubuntu17.10来安装, 2. 最 ...

  8. 5W随想

    什么时候都要想5个W:what.where.when.why.who 比如:提bug的时候:这个问题是什么问题,在哪里发现的,什么时候发现的/什么时候修复好,怎么发现的/为什么是bug,谁发现的/指给 ...

  9. Django中update和save()同时作用

    数据更新操作,对单条记录,可以使用save或者是update两种方式. save() 默认保存后会看到sql语句中更新了所有字段,而save的值是之前获取时候的字段值,是缓存下来的,并不一定最新,可能 ...

  10. 适用于 macOS 下 2K 显示器开启 HiDPI 的简便解决方案

    前阵子入手了一款2k的显示器用于mbp的拓展屏幕,但由于苹果系统的严格限制,只有在4K及以上显示器上才能开启自带的HiDPI进行缩放以达到retina显示屏的效果.2k显示器下的字体会偏小发虚,使用1 ...