LCM的个数
Time Limit: 1000 ms
Memory Limit: 65536 KiB
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
Hint
import java.util.*;
public class Main
{
public static void main(String args[])
{
Scanner cin=new Scanner(System.in);
int n ,i ,j,k,c;
int []ls = new int[100000];
while(cin.hasNext())
{
n = cin.nextInt();
k = 0;
double h = Math.sqrt(n);
for(i = 1; i <= h; i++)
{
if(n%i == 0)
{
ls[k++] = i;
if(n/i != i)
{
ls[k++] = n/i;
}
}
}
c = 0;
for(i = 0; i < k; i++)
{
for(j = i+1; j < k; j++)
{
if(ls[i]/gcd(ls[i],ls[j])*ls[j] == n)
c++;
}
}
System.out.println(c+1);
}
cin.close();
}
public static int gcd(int a, int b)
{
return b==0?a:gcd(b,a%b);
}
}