HDU44979 GCD and LCM (素因子分解+計數)
題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=4497
題意:
求有多少種(x,y,z)使得最小公倍數為l,最大公約數為g
分析:
我們將l,g進行素因子分解;
很明顯當g有l沒有的素因子 和g的某一個因子的次數大於l的這個因子的次數的時候答案為0;
然後是有答案的情況下,我們設g中某一個因子數的次數為num1,l中這個因子的次數為num2;
那麼在決定x,y,z在這個因子上的次數時我們要這樣考慮,至少有一個為num1,至少有一個為
num2,然後根據容斥原理可以得出這種情況的方案數
程式碼許下:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <map>
using namespace std;
int G[2][50],L[2][50];
int gcd(int a,int b)
{
if(b) return gcd(b,a%b);
return a;
}
int main()
{
int t,g,l;
scanf("%d",&t);
while(t--){
scanf("%d%d",&g,&l);
int cnt1=0,cnt2=0;
memset(G,0,sizeof(G));
memset(L,0,sizeof(L));
map<int ,int >mp1;
map<int ,int >mp2;
for(int i=2;i<=g;i++){
if(g%i==0){
G[0][cnt1]=i;
while(g%i==0){
G[1][cnt1]++;
g/=i;
}
cnt1++;
}
}
if(g>1){G[0][cnt1]=g;G[1][cnt1++]=1;}
for(int i=2;i<=l;i++){
if(l%i==0){
L[0][cnt2]=i;
while(l%i==0){
L[1][cnt2]++;
l/=i;
}
cnt2++;
}
}
if(l>1) {L[0][cnt2]=l;L[1][cnt2++]++;}
bool flag=0;
for(int i=0;i<cnt1;i++)
mp1[G[0][i]]=G[1][i];
for(int i=0;i<cnt2;i++)
mp2[L[0][i]]=L[1][i];
for(int i=0;i<cnt1;i++){
if(mp1[G[0][i]]>mp2[G[0][i]])
flag=1;
}
if(flag){ puts("0"); continue;}
long long ans=1;
//cout<<cnt1<<" "<<cnt2<<endl;
/*****
cout<<"*******"<<endl;
for(int i=0;i<cnt1;i++)
cout<<G[0][i]<<" "<<G[1][i]<<endl;
cout<<"*******"<<endl;
for(int i=0;i<cnt2;i++)
cout<<L[0][i]<<" "<<L[1][i]<<endl;
cout<<"*******"<<endl;
******/
for(int i=0;i<cnt2;i++){
int num1=mp1[L[0][i]];
int num2=mp2[L[0][i]];
if(num1==num2) continue;
long long tmp = (num2-num1+1)*(num2-num1+1)*(num2-num1+1);
tmp-=2*(num2-num1)*(num2-num1)*(num2-num1);
tmp+=(num2-num1-1)*(num2-num1-1)*(num2-num1-1);
ans*=tmp;
cout<<"tmp "<<tmp<<endl;
}
cout<<ans<<endl;
}
return 0;
}
相關文章
- HDU 4497GCD and LCM(素數分解)GC
- Find Terrorists(素數篩選+素因子分解)Error
- HDU 4497 GCD and LCM(拆素數+組合)GC
- 分數的GCD和LCMGC
- HDU 5317 RGCDQ (素因子分解+預處理)GC
- CodeForces - 463E Caisa and Tree (dfs+素因子分解)AI
- 質數判斷、質因子分解、質數篩
- UVA 10892 LCM Cardinality (分解因數+暴力)
- GCD&&LCM的一些經典問題GC
- 遞迴演算法程式設計整數因子分解問題的遞迴演算法遞迴演算法程式設計
- 51Nod2026 Gcd and Lcm-題解GC
- LCM介面設計
- 素數計數函式函式
- 計算素數【Java】Java
- MT6797 LCM設計指南
- 4.【Python】分類演算法—Factorization Machine(FM,因子分解機)Python演算法Mac
- 藍橋杯 演算法訓練 素因子去重(Java)演算法Java
- HJ6 質數因子
- 計算2..n的素數
- 6-2 計算素數和
- 大質數分解模板
- 最大公約數GCDGC
- ACM 素數ACM
- 計算 1-100 的素數
- 萬字長文,詳解推薦系統領域經典模型FM因子分解機模型
- 階乘質因數分解
- 【數論】素數篩法
- CF 1977 C. Nikita and LCM (*1900) 數論
- 《整數分解》讀書筆記筆記
- java求一個整數的最小因子Java
- Ftj aRTTy因子計算最佳實踐
- LCM模組生產流程
- 使用 LCM 加速生圖
- 推薦系統特徵構建新進展:極深因子分解機模型 | KDD 2018特徵模型
- 直方圖、基數、選擇性、群集因子直方圖
- [CareerCup] 7.7 The Number with Only Prime Factors 只有質數因子的數字
- 【程式設計測試題】素數對、不要二、求和程式設計
- UVA 12716 GCD XOR (數論 gcd和異或不等式)GC