HDU 4497 GCD and LCM(拆素數+組合)
解體的思路:
Total Submission(s): 690 Accepted Submission(s): 319
lcm(x,y,z)=k;
gcd(x,y,z)=t;
若:x=a*t; y=b*t; z=c*t;
則lcm(a,b,c)=k/t;
若k/t=2^A;
則a,b,c中至少有一個數為2^A,至少有一個數是2^0,另外一個數為2^(0~A);共6*A種情況。
則,若k/t=2^A*3^B*5^C;
a,b,c的情況數為:(6*A)*(6*B)*(6*C);
PS:從鵬哥那裡偷來的,他說的比較清楚。
GCD and LCM
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Submission(s): 690 Accepted Submission(s): 319
Problem Description
Given two positive integers G and L, could you tell me how many solutions of (x, y, z) there are, satisfying that gcd(x, y, z) = G and lcm(x, y, z) = L?
Note, gcd(x, y, z) means the greatest common divisor of x, y and z, while lcm(x, y, z) means the least common multiple of x, y and z.
Note 2, (1, 2, 3) and (1, 3, 2) are two different solutions.
Note, gcd(x, y, z) means the greatest common divisor of x, y and z, while lcm(x, y, z) means the least common multiple of x, y and z.
Note 2, (1, 2, 3) and (1, 3, 2) are two different solutions.
Input
First line comes an integer T (T <= 12), telling the number of test cases.
The next T lines, each contains two positive 32-bit signed integers, G and L.
It’s guaranteed that each answer will fit in a 32-bit signed integer.
The next T lines, each contains two positive 32-bit signed integers, G and L.
It’s guaranteed that each answer will fit in a 32-bit signed integer.
Output
For each test case, print one line with the number of solutions satisfying the conditions above.
Sample Input
2
6 72
7 33
Sample Output
72
0
#include <algorithm>
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <iomanip>
#include <stdio.h>
#include <string>
#include <queue>
#include <cmath>
#include <stack>
#include <map>
#include <set>
#define eps 1e-7
#define M 1000100
#define LL __int64
//#define LL long long
#define INF 0x3f3f3f3f
#define PI 3.1415926535898
using namespace std;
const int maxn = 5000010;
int f[maxn];
int p[maxn];
int t;
void prime()
{
t = 0;
int n = maxn/2;
memset(f, 0 , sizeof(f));
for(int i = 4; i <= n; i += 2)
f[i] = 1;
for(int i = 3; i <= n; i += 2)
{
for(int j = 2*i; j <= n; j += i)
f[j] = 1;
}
for(int i = 2; i <= n; i++)
if(!f[i])
p[t++] = i;
}
int num[100010];
int main()
{
prime();
int T;
cin >>T;
while(T--)
{
int n, k;
cin >>n>>k;
int site = 0;
memset(num, 0, sizeof(num));
if(n == k)
cout<<"1"<<endl;
else if(k%n)
cout<<"0"<<endl;
else
{
int m = k/n;
for(int i = 0; i < t; i++)
{
int flag = 0;
while(1)
{
if(m%p[i] == 0)
{
m/=p[i];
flag = 1;
num[site]++;
}
else
{
if(flag)
site++;
break;
}
}
}
if(m != 1)
num[site++] = 1;
LL sum = 1;
for(int i = 0; i < site; i++)
sum *= num[i]*6;
cout<<sum<<endl;
}
}
}
相關文章
- HDU 4497GCD and LCM(素數分解)GC
- HDU44979 GCD and LCM (素因子分解+計數)GC
- HDU 2582 f(n) (組合數的gcd)GC
- 分數的GCD和LCMGC
- hdu 1695 GCDGC
- HDU 2504 又見GCDGC
- GCD&&LCM的一些經典問題GC
- HDU 1792 - A New Change Problem(規律,最大不能組合數及其個數)
- hdu 4546 優先佇列 數列組合和第m小佇列
- 【數學】組合數學 - 排列組合
- 51Nod2026 Gcd and Lcm-題解GC
- HDU 4465 Candy(組合+log優化)優化
- HDU 5726-GCD(暴力+map)GC
- HDU2588GCD(尤拉函式)GC函式
- HDU 2732 Leapin' Lizards(拆點+最大流)API
- 組合數學
- 組合數學筆記-排列與組合筆記
- 組合數問題
- lg組合計數
- 組合數字首和
- 【數學】組合數學 - 卡特蘭數
- Python引數組合Python
- 《小 學 組 合 數 學》
- 【組合數學】組合數學簡介 ( 組合思想 2 : 數學歸納法 | 數學歸納法推廣 | 多重歸納思想 )
- HDU 1695-GCD(容斥原理+尤拉函式)GC函式
- HDU 1695 GCD (容斥 + 莫比烏斯反演)GC
- 【dp+組合數學】hdu 2018 多校第九場 1001 Rikka with Nash Equilibrium hdu 6415UI
- 不學無數——組合模式模式
- 計算組合數 (sdut oj)
- 組合計數思維題
- CF938E-組合數
- 組合數學 XKerror 筆記Error筆記
- 【POJ 2249】 Binomial Showdown 組合數學 排列組合計算
- 組合數學筆記-特殊計數數列筆記
- HDU 5317 RGCDQ (素因子分解+預處理)GC
- 最大公約數GCDGC
- 2017年藍橋杯javaB組——等差素數列Java
- Redux實現組合計數器Redux