P1029 [NOIP2001 普及组] 最大公约数和最小公倍数问题 - 洛谷
gcd() 求最大公约数函数
思路
- 应该都知道最大公约数与最小公倍数的乘积就是原两个数的积
- 若 那么满足要求的个数就为一个
- 只需要遍历从 到 得到满足条件的个数,最后在乘二就能得到结果
Code
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
ll x,y,sum,ans=0;
cin >> x >> y;
if(x==y){
cout << 1;
return 0;
}
sum=x*y;
for(ll i=x;i<=sqrt(sum);++i){
ll z=sum/i;
if(i*z==sum)
if(__gcd(i,z)==x)
ans+=2;
}
cout << ans;
return 0;
}
题目
题目描述
输入两个正整数 ,求出满足下列条件的 的个数:
- 是正整数。
- 要求 以 为最大公约数,以 为最小公倍数。
试求:满足条件的所有可能的 的个数。
输入格式
一行两个正整数 。
输出格式
一行一个数,表示求出满足条件的 的个数。
输入输出样例
输入 #1
3 60
输出 #1
4
说明/提示
有 种:
- 3,60。
- 15,12。
- 12,15。
- 60,3。
对于 100% 的数据,。