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
code:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner reader = new Scanner(System.in);
long n, num[];
num = new long[111000];
while(reader.hasNext())
{
n = reader.nextLong();
int tp = 0;
int cnt = 0;
for(int i = 1;i*i<=n;i++)
{
if(n%i == 0)
{
num[tp++] = i;
if(i*i != n)
{
num[tp++] = n/i;
}
}
}
for(int i = 0;i<tp;i++)
{
for(int j = i;j<tp;j++)
{
if(num[i]*num[j]/fff(num[i], num[j]) == n) cnt++;
}
}
System.out.println(cnt);
}
}
public static long fff(long m, long n)
{
long t, r, m1, n1;
if(m<n)
{
t = m;
m = n;
n = t;
}
m1 = m;
n1 = n;
while(n!=0)
{
r = m%n;
m = n;
n = r;
}
return m;
}
}