洛谷刷题,P1029 [NOIP2001 普及组] 最大公约数和最小公倍数问题C++

话不多说,直接上代码和题目

代码如下:

//最大公约数m可用奥数法求
//最小公倍数n,实际上为两数mx,my的mxy(xy均为素数即xy的最大公约数为1)
//所以有n=mxy
//y=n/(mx)且y与x互质即最大公约数为1
#include<iostream>
typedef long long LL;//防止出问题统一用LL
using namespace std;
LL maxY(LL a,LL b)//最大公约数
{
	if (a < b) { LL c = a; a = b; b = c; }//保证a>=b
	while(1){
		LL c = a % b;
		if (c == 0) return b;
		a = b; b = c;
	}
}
LL minB(LL a, LL b) {//最小公倍数//方便理解扩展的
	return a * b / max(a, b);
}
int main() {
	LL a, b,x=0;
	cin >> a >> b;
	for (LL i = a; i <= b; i += a)
		if (b % i != 0) continue;
		else
		{
			LL j = b / i;
			if (maxY(i / a, j) == 1)
			{
				//cout << i << ' ' << a * j << endl;//测试用
				x++;
			}
		}
	cout << x;
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值