2013年通化邀请赛E题(GCD and LCM 最大公约数最小公倍数关系 )
2013-08-10 19:20
344 查看
2013年通化邀请赛E题(GCD and LCM 最大公约数最小公倍数关系 )
分类: 数论2013-06-2920:33 131人阅读 评论(0) 收藏 举报
首先我先给出一个他们之间的关系
最大公约数L和最小公倍数G的关系:
1、L%G == 0;
2、设A, B的最大公约数为G, 最小公倍数为L,则:L/G = (A/G)*(B/G)
3、gcd(A/G, B/G) = 1;
本题:
题意:给你三个数x,y,z的最大公约数gcd,最小公倍数lcm . 然后求满足的x,y,z有多少种可能。(1,3,2) 和 (1,2,3)被视为不同
思路:
首先lcm%gcd == 0是必须的,否则无解。然后将tmp = lcm/gcd 进行因式分解。假设其中有一个质因子p1的幂为e1,那么着三个数中至少有一个含有
p1,至少有一个不含p1 。如果都含有p1的话他就被分到最大公约数里面去了,不会在tmp里面,如果不含有p1的话,那么p1就一定不会存在了。
那么对于质因子p1来说 如果有两个含有他的话那么结果为A(3,2)*(e1 - 1) e1 可以分成x ,y (x+y = e1 x!=0 && y != 0) 如果有一个含有它的话那么必定是
含有p1^e1次方。如果不是p1^e1次方的话,那么tmp里面的p1的幂也就不是e1了。
[cpp] view
plaincopy
#include <iostream>
#include <stdio.h>
using namespace std;
typedef long long LL;
int a[550];
int k;
void Solve(LL n)
{
int i,c;k=0;
for(i=2;i*i<=n;i++)
{
if(n%i==0)
{
c=0;
while(n%i==0)
{
c++;
n/=i;
}
a[k++]=c;
}
}
if(n>1)
a[k++]=1;
}
int main()
{
int t;
LL L,G,temp,ans;
scanf("%d",&t);
while(t--)
{
cin>>G>>L;
if(L%G)
{
puts("0");
continue;
}
temp=L/G;
Solve(temp);
ans=1;
for(int i=0;i<k;i++)
ans*=(6*a[i]);
cout<<ans<<endl;
}
return 0;
}
相关文章推荐
- JinlinOJ 通化邀请赛 E.GCD and LCM 最大公约数最小公倍数 关系
- 最大公约数和最小公倍数的关系
- HDU 2504 又见GCD(最大公约数与最小公倍数变形题)
- ACM数论之旅3---最大公约数gcd和最小公倍数lcm(苦海无边,回头是岸( ̄∀ ̄))
- [洛谷P1029]最大公约数与最小公倍数问题 题解(辗转相除法求GCD)
- 最大公约数gcd与最小公倍数lcm
- 对于求解最大公约数GCD与最小公倍数LCM的算法
- uva 11388 最大公约数与最小公倍数的关系
- SRM遇到的一个数论技巧——最大公约数和最小公倍数的关系
- 数论继续学习3--最大公约数gcd和最小公倍数lcm
- 最大公约数gcd 最小公倍数
- 最大公约数和最小公倍数的求解
- AOJ 0005 GCD and LCM (最大公约数_裸题)
- Java求两个数的最大公约数最小公倍数
- 转:最大公约数和最小公倍数的算法
- 最大公约数和最小公倍数
- C/C++训练1---最大公约数与最小公倍数
- 输入两个正整数m和n,求其最大公约数和最小公倍数。
- 最大公约数 最小公倍数、、、
- 输入两个正整数m和n,求其最大公约数和最小公倍数。