日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【dfs】GCD与LCM(jzoj 1608)

發(fā)布時間:2023/12/3 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【dfs】GCD与LCM(jzoj 1608) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

GCD與LCM

題目大意:

給出a,b的最大公因數(shù)和最小公倍數(shù),求出符合條件的a,b的最小差值

樣例輸入

6 36

樣例輸出

6

數(shù)據(jù)范圍限制

提示

數(shù)據(jù)說明:

對于50%的數(shù)據(jù),1<=a<=b<=10^3。

對于100%的數(shù)據(jù),1<=a<=b<=10^9。

解題思路:

先用最小公倍數(shù)除以最大公因數(shù),得出a,b(已經(jīng)除過最大公因數(shù))的乘積,然后分解質因數(shù),將相同的乘在一起,再用dfs分配到兩邊求出最小的差,最后還要乘上最大公因數(shù)

#include<cstdio> #include<iostream> using namespace std; long long n,m,t,num,ans,a[10005]; int w,o; long long minn(long long xx,long long yy)//求最小的 {if (xx<yy) return xx;return yy; } void dfs(long x,long y,int dep)//分配 {if (dep>w){if (x>y) ans=minn(ans,x-y);//要使差是整數(shù)else ans=minn(ans,y-x);return;}dfs(x*a[dep],y,dep+1);//分配給左邊dfs(x,y*a[dep],dep+1);//分配給右邊 } int main() {scanf("%lld %lld",&n,&m);t=m/n;num=2;while(t!=1)//沒有除完if (t%num==0) //可以整除{t/=num;//除if (o) a[w]*=num;//已經(jīng)有同樣的數(shù),就乘在一起,避免不是互質else a[++w]=num,o=1;//沒有同樣的數(shù),自己單獨一個}else num++,o=0;//除數(shù)++ans=9223372036854775807;//long long的范圍,2^63-1dfs(1,1,1);//dfs分配printf("%lld",ans*n);//乘上最大公因數(shù)return 0; }

總結

以上是生活随笔為你收集整理的【dfs】GCD与LCM(jzoj 1608)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。