题解
2023-08-06 15:59:41
发布于:浙江
40阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
int gcd(int a ,int b){ //求两数的最大公约数的函数
int _gcd = 0;
for (int s = 1 ; s <= min(a ,b) ; s++)
if (a % s == 0 && b % s == 0)
_gcd = s;
return _gcd;
};
int main(){
int n ,idx = 0 ,sum = 0;
cin >> n;
int lst[n + 1] = {};
for (int i = 1; i <= n ; i++){ //将n的所有约数存到一个数组中
if (n % i == 0){
idx += 1;
lst[idx] = i;
}
}
for (int i = 1; i <= idx ; i++){ //双重循环遍历
for (int j = 1; j <= idx ; j++){
if (i != j){
sum += gcd(lst[i] ,lst[j]);
}
}
}
cout << sum / 2; //输出,因为之前例如1-2和2-1加了两次,因此要除以2
return 0;
}
这里空空如也
有帮助,赞一个