描述
小Hi最近在追求一名學數學的女生小Z。小Z其實是想拒絕他的,但是找不到好的說辭,於是提出了這樣的要求:對於給定的兩個正整數N和M,小Hi隨機選取一個N的約數N',小Z隨機選取一個M的約數M',如果N'和M'相等,她就答應小Hi。
小Z讓小Hi去編寫這個隨機程序,到時候她review過沒有問題了就可以抽籤了。但是小Hi寫着寫着,卻越來越覺得機會渺茫。那麼問題來了,小Hi能夠追到小Z的機率是多少呢?
輸入
每個輸入文件僅包含單組測試數據。
每組測試數據的第一行爲兩個正整數N和M,意義如前文所述。
對於40%的數據,滿足1<=N,M<=106
對於100%的數據,滿足1<=N,M<=1012
輸出
對於每組測試數據,輸出兩個互質的正整數A和B(以A分之B表示小Hi能夠追到小Z的機率)。
- 樣例輸入
import java.util.*;
public class Main
{
public static void main(String[] args)
{
long count1=0,count2=0,count3=0;
long a,b;
Scanner sc=new Scanner(System.in);
a=sc.nextLong();
b=sc.nextLong();
count1=f(a);
count2=f(b);
count3=f(gcd(a,b));
long c=gcd(count1*count2,count3);
System.out.print(count1*count2/c+" "+count3/c);
}
static long gcd(long a,long b)
{
if(a%b==0)
return b;
return gcd(b,a%b);
}
static long f(long num)
{
long ans=0;
for(long i=1;i*i<=num;i++)
{
if(num%i==0) {ans++;
if(i*i!=num) ans++;}
}
return ans;
}
}