Problem Description
对于我们来说求两个数的LCM(最小公倍数)是很容易的事,现在我遇到了一个问题需要大家帮助我来解决这问题,问题是:给你一个数n,然后统计有多少对(a<=b) LCM(a,b)=n;例如LCM(a,b)=12; 即(1,12),(2,12),(3,12),(4,12),(6,12),(12,12),(3,4),(4,6);
Input
输入数组有多组,每组数据包含一个整数n(n<=10^9);
Output
输出每组数据的对数。
Sample Input
2346
Sample Output
2235
先拆分得到所有因子,然后循环判断
lcm(a, b) = a / gcd(a, b) * b
import java.util.*;
public class Main {
static final int N = 100005;
static int gcd(int x, int y){
if(y == 0) return x;
return gcd(y, x % y);
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNext()){
int n = in.nextInt();
int[] num = new int[N];
int k = 0;
for(int i = 1; i*i <= n; i++){
if(n % i == 0){
num[k++] = i;
if(i*i != n)
num[k++] = n/i;
}
}
int cnt = 0;
for(int i = 0; i < k; i++){
for(int j = i; j < k; j++){
if(num[i] / gcd(num[i], num[j]) * num[j] == n)
cnt++;
}
}
System.out.println(cnt);
}
}
}