洛谷 P1029 [NOIP2001 普及组] 最大公约数和最小公倍数问题
1.最大公约数和最小公倍数的乘积就是原两个数的积
2.欧几里得算法 又叫辗转相除法 求最大公约数
#include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;
//朴素方法的原理:
//枚举一个数,判断它能否被读入的两个数的积整除,
//如果可以再判断它和两个数的积除以它所得的数
//的最大公约数和读入的最大公约数是否相同,如果相同则ans++
long long x,y,ans=0;
int gcd(int a,int b){
if(a%b==0)return b;
else gcd(b,a%b);
}
int main(){
cin>>x>>y;//x为最大公约数 y为最小公倍数
if(x==y)ans--;
long long mul=x*y;
for(int i=1;i<=sqrt(mul);i++){
if(mul%i==0&&gcd(i,mul/i)==x) ans+=2;
}
cout<<ans;
return 0;
}