基础的数论题:对n进行因式分解,因为两个数一定是这两个数的LCM的因数。根据公式a*b = lcm(a,b)*gcd(a,b) 判断a,b是否为所求。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
int gcd(int a,int b){
return b == 0 ? a : gcd(b,a%b);
}
int main(){
int n;
vector<int> a;
while(~scanf("%d",&n) && n){
int ans = 0;
a.clear();
for(int i = 1; i*i <= n; i++){
if(n%i==0){
if(i*i==n){
a.push_back(i);
}else{
a.push_back(i);
a.push_back(n/i);
}
}
}
for(int i = 0; i < a.size(); i++){
for(int j = i; j < a.size(); j++){
if(a[i]*a[j] == n*gcd(a[i],a[j])){
ans++;
}
}
}
//cout<<a.size()<<endl;
cout<<n<<" "<<ans<<endl;
}
return 0;
}
本文介绍了一种解决特定数论问题的方法,该问题涉及对整数n进行因式分解,并通过计算所有可能的数对(a, b),使得a*b等于n与这些数对的最大公约数(gcd)和最小公倍数(lcm)的乘积。使用C++实现了一个程序来找出符合条件的所有数对。
955

被折叠的 条评论
为什么被折叠?



