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
2
3
4
6
Sample Output
2
2
3
5
mport java.util.Scanner;
public class Main {
public static long f(long a, long b)
{
if(b == 0)return a;
else return f(b, a % b);
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
long n, i, j, x;
long a[] = new long[110005];
while(in.hasNextLine())
{
x = 0;
n = in.nextInt();
long l = (long)Math.sqrt(n);
int p = 0;
for(i = 1; i <= l; i++)
{
if(n % i == 0)
{
a[++p] = i;
if(i * i != n)
{
a[++p] = n / i;
}
}
}
for(i = 1; i <= p; i++)
{
for(j = i; j <= p; j++)
{
if(a[(int)i] * a[(int)j] / f(a[(int)i], a[(int)j]) == n)
{
x++;
}
}
}
System.out.println(x);
}
in.close();
}
}