[R3C]公因数求和

// 15. [R3C]公因数求和.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/*
[R3C]公因数求和
原题地址:https://bs.daimayuan.top/p/15
题目描述
给定正整数 a 和 b,求所有 a 和 b 公因数的和。
输入格式
第一行包含 2 个正整数 a 和 b。
输出格式
输出一个整数,表示所有 a 和 b 公因数的和。
样例输入
36 90
样例输出
39
样例解释
36 和 90 共有 6 个公因数:1、2、3、6、9、18。
所以答案为 1+2+3+6+9+18 = 39。
数据范围与提示
对于 50% 的数据,1 <= a,b <= 10^6。
另有 10% 的数据,a = b。
对于 100% 的数据,1 <= a,b <= 10^12。

*/
#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>

using namespace std;	

long long a, b;
 
long long gcd(long long a, long long b) {
	return b ? gcd(b, a % b) : a;
}




int main()
{
	cin >> a >>  b;
	long long v = gcd(a, b);
	long long sum = 0;
	for(long long i= 1;i*i<=v;i++) {
		if (v % i == 0) {
			sum += i;
			if(  v/i != i ) {sum+= v / i;}
		}
	}

	cout << sum << endl;
	

	return 0;
}

posted on 2025-07-11 14:46  itdef  阅读(14)  评论(0)    收藏  举报

导航