基础的数论题:对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;
}