最大公约数
欧几里得算法
原理
gcd(a,b)=gcd(b,a mod b)
gcd(a,0)=a
代码
int gcd(int a, int b)
{
return b ? gcd(b, a % b) : a;
}
P1029 [NOIP2001 普及组] 最大公约数和最小公倍数问题
题目
输入两个正整数 ,求出满足下列条件的 的个数:
- 是正整数。
- 要求 以 为最大公约数,以 为最小公倍数。
试求:满足条件的所有可能的 的个数。
思路
代码
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
LL x,y,ans;
LL gcd(LL a,LL b){
return b? gcd(b,a%b):a;
}
int main() {
cin>>x>>y;
LL t=x*y;
for(LL i=1;i*i<=t;i++)
if(t%i==0 && gcd(i,t/i)==x)
ans+=2;
if (x==y) ans--;
cout<<ans;
return 0;
}