Aladdin and the Flying Carpet (唯一分解定理)
kuangbin带你飞专题十四-C
题意:
给定一个面积为a的矩形,求有多少种整数的边的组合可以组成面积为a的矩形,且矩形的最短边长度大于等于b。注意,(x,y)和(y,x)属于同一种组合。(实际上就是求a的因子个数)
思路:
对于一个数求解他的因子个数的话,我们可以使用唯一分解定理.
唯一分解定理:
任何一个大于1的数都可以分解为有限个质数乘积的形式,即:N=(p^a1)(p^a2)....(p^ak),
而此定理又有一个推论:N的因子个数等于(a1+1)*(a2+1)*(a3+1)....*(ak+1).我们通过这两个公式即可求解.
首先对素数打表,方便筛因子,当我们得到因子个数后,要首先除2,因为(x,y)和(y,x)属于同一种组合
紧接着我们再遍历剔除小于b的个数即可. (注意:当筛选因子到最后时,要注意判断此时N是否大于1,如果大于1说明没被筛选完,还存在一个极大的素数,此时要乘2)
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int SIZE = 1e7;
int prime[SIZE]; //第i个素数,从1开始!
bool is_prime[SIZE]; //true表示i是素数
int ola(ll n){int cnt=0;memset(is_prime,true,sizeof(is_prime));is_prime[1]=false;for(ll i=2;i<=n;i++){if(is_prime[i]) prime[++cnt]=i;for(int j=1;j<=cnt&&i*prime[j]<=n;j++){is_prime[i*prime[j]]=false;if(i%prime[j]==0) break;}}return cnt;}
int main(){int t;scanf("%d",&t);ll cnt=ola(1000000);for(int k=1;k<=t;k++){ll ans=1,num=0;ll a,b;scanf("%lld %lld",&a,&b);if(b*b>a) {printf("Case %d: 0\n",k);continue;}ll case1=a;for(int i=1;i<=cnt&&prime[i]<=sqrt(case1);i++){ll cnt1=0;while(case1%prime[i]==0){cnt1++;case1/=prime[i];}ans*=(cnt1+1);}if(case1>1) ans*=2;ans/=2;ll sum=0;for(ll i=1;i<b;i++){if(a%i==0) sum++;}ans-=sum;printf("Case %d: %lld\n",k,ans);}return 0;}
Aladdin and the Flying Carpet (唯一分解定理)相关推荐
- Aladdin and the Flying Carpet (素数打表+正整数的唯一分解定理,找因数对)
题目大意:给两个数a,b,求满足c*d==a且c>=b且d>=b的c,d二元组对数,(c,d)和(d,c)属于同一种情况 题目分析:根据唯一分解定理先将a唯一分解,则a的所有正约数的个数为 ...
- Aladdin and the Flying Carpet(唯一分解定理)
传送门 It's said that Aladdin had to solve seven mysteries before getting the Magical Lamp which summon ...
- LightOJ - 1341 Aladdin and the Flying Carpet(数论)
题意 有一块矩形(也可能是正方形)的飞毯. 给定飞毯的面积\(n\)和最小可能的边长\(a\),求可能有多少种不同边长的飞毯.(\(1<=a<=n<=1e12\)) 如面积\(n=6 ...
- C - Aladdin and the Flying Carpet(数论结论+思维)
这道题应该是我的反思题. 千万自己要注意,如果一个数n没有被完全分解,答案千万要记得ans*=2因为还有一个比1e6更大的素数存在作为他的因子!! 我明明找到了a的约数个数/2-a在b一下的约数个数= ...
- 阿拉丁和飞毯(唯一分解定理&因数个数求和+素筛)
我是传送门 It's said that Aladdin had to solve seven mysteries before getting the Magical Lamp which summ ...
- 欧几里得算法与唯一分解定理
整理的算法模板合集: ACM模板 目录 最大公约数与最大公倍数 唯一分解定理 快速分解质因子 最大公约数与最大公倍数 最多O(logn)O(logn)O(logn) int gcd(int a, in ...
- FZU 1075 分解素因子【数论/唯一分解定理/分解素因子裸模板】
[唯一分解定理]:https://www.cnblogs.com/mjtcn/p/6743624.html 假设x是一个正整数,它的值不超过65535(即1<x<=65535),请编写一个 ...
- 唯一分解定理(算术基本定理)详解——hdu5248和lightoj1341
算数分解定理(唯一分解定理): 定义: 任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积 N=P1a1 P2a2P3a3-Pnan,这里P1<P2<P3-& ...
- Gym-101466K Random Numbers(线段树,数学,唯一分解定理)
给一棵树,树上每个节点有一个权值,有两个操作,RAND操作查询u的子树乘积是多少以及有多少因数,SEED操作把节点u乘上v n,q <= 1e5.数值小于等于1e9,最大的质因数不超过13 组队 ...
- LightOJ - 1236 (唯一分解定理)
题意:求有多少对数对(i,j)满足lcm(i,j) = n,1<=i<=j, 1<=n<=1e14. 分析:根据整数的唯一分解定理,n可以分解为(p1^e1)*(p2^e2)* ...
最新文章
- 史上最全的“大数据”学习资源
- “头移植模型”论文称换头术可行 业内疑两大问题未解
- C++拷贝构造函数的陷阱
- python关键字和保留字_或带有Python示例的关键字
- java地址自动拆分_java – Hibernate:每个月自动拆分表
- 根据经纬度计算范围_高中地理必修一二三思维导图+计算公式全汇总!能用3年...
- 第五章 使用 Bootstrap Typeahead 组件(百度下拉效果)
- (08)VHDL实现2路选择器
- 网管囧事系列二:又要杀毒,又要防***,网管怎样三头六臂?
- Brownie Slicing(二分枚举答案)
- Socket选项系列之TCP_NODELAY
- 解决升级PHP7后 微信公众号收不到消息
- 【转载】 CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)概念区分理解
- 考研 数学一 公式笔记
- 前端实现文件下载的功能
- 小白用Math对象随机生成一个名字
- 架设国外服务器怎么维护,架设海外服务器流程分享
- Pycharm创建项目“New environment using“与“Existing interpreter“的区别
- 改变ros bag 中消息的frame_id 和话题名
- 在 Jupyter Notebook 中使用R语言