hdu_4497GCD and LCM(合数分解)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4497
GCD and LCM
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)
Total Submission(s): 2151 Accepted Submission(s): 955
Note, gcd(x, y, z) means the greatest common divisor of x, y and z, while lcm(x, y, z) means the least common multiple of x, y and z.
Note 2, (1, 2, 3) and (1, 3, 2) are two different solutions.
The next T lines, each contains two positive 32-bit signed integers, G and L.
It’s guaranteed that each answer will fit in a 32-bit signed integer.
6 72
7 33
0
//合数分解
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
const int maxn = ;
int prime[maxn];
bool pri[maxn];
int cnt;
void init()
{
cnt = ;
pri[] = pri[] = ;
//prime[0] = 2;
for(int i = ; i < maxn; i++){
if(!pri[i]){ prime[cnt++] = i;
for(int j = i+i; j < maxn; j+=i)
{
pri[j]=;
}
}
}
return;
}
ll m1[],m2[];
ll c1[],c2[];
int main()
{
init();
int T;
ll G,L;
scanf("%d",&T);
while(T--)
{
memset(m1,,sizeof(m1));
memset(c1,,sizeof(c1));
memset(m2,,sizeof(m2));
memset(c2,,sizeof(c2));
scanf("%lld%lld",&G,&L);
int tm = ;
bool in = ;
bool fl = ;
//printf("%d\n",prime[1]);
if(L%G) fl = ;
for(int i = ; i< cnt; i++){
while(prime[i]<=L&&L%prime[i]==){
L = L/prime[i];
m2[tm] = prime[i];
c2[tm]++;
in = ;
}
if(in) tm++;
in = ;
}
if(L!=){
m2[tm] = L;
c2[tm] = ;
tm++;
}
for(int i = ; i < tm; i++){
while(m2[i]<=G&&G%m2[i]==){
G = G/m2[i];
m1[i] = m2[i];
c1[i]++;
}
in = ;
}
if(G!=){
fl = ;
}
/*puts("haha");
for(int i = 0; i < tm; i++){
printf("m1[%d]=%d; m2[%d]=%d;\n",i,m1[i],i,m2[i]);
printf("c1[%d]=%d; c2[%d]=%d;\n",i,c1[i],i,c2[i]);
}
*/
if(fl==) {puts(""); continue;}
ll ans = ;
for(int i = ; i < tm; i++){
//需要特判当c1[i] =c2[i]的情况
ll E;
if(c1[i]==c2[i]) E = ;
else E = c2[i]-c1[i]-;
/*
也可以用排列组合的想法,每次找到两个数包含首尾的两个值,然后中间的一个在从所有可能中选取一个。
这样最后的公式就是A(3,2)*(c2[i]-c1[i]-1);
所以
if(c2[i]>c1[i]) ans = ans*6*(c2[i]-c1[i]-1);
*/
ans = ans*((c2[i]-c1[i]+)*(c2[i]-c1[i]+)*(c2[i]-c1[i]+)-*(c2[i]-c1[i])*(c2[i]-c1[i])*(c2[i]-c1[i])+E*E*E);
}
printf("%lld\n",ans);
}
return ;
}
hdu_4497GCD and LCM(合数分解)的更多相关文章
- LightOJ 1236 Pairs Forming LCM 合数分解
题意:求所有小于等于n的,x,y&&lcm(x,y)==n的个数 分析:因为n是最小公倍数,所以x,y都是n的因子,而且满足这样的因子必须保证互质,由于n=1e14,所以最多大概在2^ ...
- HDU 4497 GCD and LCM (合数分解)
GCD and LCM Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total ...
- HDU 4610 Cards (合数分解,枚举)
Cards Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- hdu 5317 合数分解+预处理
RGCDQ Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
- hdu 4777 树状数组+合数分解
Rabbit Kingdom Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- Perfect Pth Powers pku-1730(筛+合数分解)
题意:x可以表示为bp, 求这个p的最大值,比如 25=52, 64=26, 然后输入x 输出 p 就是一个质因子分解.算法.(表示数据上卡了2个小时.) 合数质因子分解模板. ]; ]; ; ;n ...
- pku1365 Prime Land (数论,合数分解模板)
题意:给你一个个数对a, b 表示ab这样的每个数相乘的一个数n,求n-1的质数因子并且每个指数因子k所对应的次数 h. 先把合数分解模板乖乖放上: ; ans != ; ++i) { ) { num ...
- UVA 10791 Minimum Sum LCM(分解质因数)
最大公倍数的最小和 题意: 给一个数字n,范围在[1,2^23-1],这个n是一系列数字的最小公倍数,这一系列数字的个数至少为2 那么找出一个序列,使他们的和最小. 分析: 一系列数字a1,a2,a3 ...
- hdu4497 GCD and LCM ——素数分解+计数
link:http://acm.hdu.edu.cn/showproblem.php?pid=4497 如果G%L != 0,说明一定无解. 把K = G / L质数分解,G / L = p1^t1 ...
随机推荐
- seo我告诉你
seo我告诉你,这回seo真的告诉你百度云链接 链接:http://pan.baidu.com/s/1qYpM9y8 密码:mad6 seo优化教程:
- 深入JS原型与原型链
要了解原型和原型链,首先要理解普通对象和函数对象. 一.普通对象和函数对象的区别 在Javascript的世界里,全都是对象,而对象之间也是存在区别,我们首先区分一下普通对象和函数对象,如下代码: f ...
- du 命令详解
du : show disk usage 作用:统计目录或文件所占用磁盘空间的大小. 语法:du 参数 选项 参数: -a 为每个制定文件显示磁盘使用情况, 或者为目录中每个文件显示各自磁盘使用情况 ...
- 纯CSS实现箭头、气泡让提示功能具有三角形图标(简单实例)
<style type="text/css"> /*向上箭头,类似A,只有三个边,不能指定上边框*/ .arrow-up { width: 0px; height: 0 ...
- C# 全选中数字文本框内容
/// <summary> /// 全选中数字文本框内容 /// </summary> /// <param name=&quo ...
- Spark算子篇 --Spark算子之combineByKey详解
一.概念 rdd.combineByKey(lambda x:"%d_" %x, lambda a,b:"%s@%s" %(a,b), lambda a,b:& ...
- ASP.NET 设计模式:设计模式和原则简述
设计模式的概念 设计模式是高层次的.抽象的解决方案模板.可以将这些模式视为解决方案的蓝本而不是解决方案本身.通常是通过重构自己的代码并将问题泛化来实现设计模式. 软件设计中常见的模式大体分为三类: 创 ...
- fgets的用法
fgets的用法: char *fgets(char *s, int size, FILE *stream); fgets() reads in at most one les ...
- 表迁移工具的选型-复制ibd的方法
1.1. 场景 有的时候开放人员自己的库需要帮忙导一些数据,但是表的数据量又很大.虽然说使用mysqldump或mysqlpump也可以导.但是这耗时需要比较久. 记得之前建议开放人员可以直接使用na ...
- liveshow回顾
在2017年8月14号的一天接到一个即看即买的项目,大致功能如下 1.现场走秀直播同步到H5页面 2.实时显示直播间人数 3.点赞并实时显示给用户 4.在某个时间点,可以全体推送一些消息给所有用户 5 ...