说明
输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数。
条件:
- P,A是正整数;
- 要求P,Q以x0为最大公约数,以y0为最小公倍数。
试求:
满足条件的所有可能的两个正整数的个数。
输入格式
每个测试文件只包含一组测试数据,每组两个正整数x0和y0(2<=x0<100000,2<=y0<=1000000)。
输出格式
对于每组输入数据,输出满足条件的所有可能的两个正整数的个数。
下面是对样例数据的说明:
输入3 60
此时的P Q分别为:
3 60
15 12
12 15
60 3
所以,满足条件的所有可能的两个正整数的个数共4种。
样例
输入数据 1
3 60
输出数据 1
4
【思路】
我们知道PQ==x0y0,那么我们可以用i和j控制P和Q,判断一个i和j的最大公因数、最小公倍数与x0、y0是否相同,若相同tmp就加1,最后输出tmp即可。
【代码】
#include<bits/stdc++.h>
using namespace std;
int istrue(long long n,long long m)
{
long long max;
if(n<m) swap(n,m);
while(m!=0)
{
max=n;
n=m;
m=max%m;
}
return n;
}
int main()
{
long long x0,y0,ans,tmp=0;
cin>>x0>>y0;
ans=x0*y0;
for(int i=x0;i<=y0;i++)
{
for(int j=y0;j>=x0;j--)
{
int a=istrue(i,j);
int b=i*j/a;
if(a==x0&&b==y0)
tmp++;
}
}
cout<<tmp;
return 0;
}