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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

一道GCD LCM题目题解

發布時間:2023/12/19 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一道GCD LCM题目题解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述:

第一行和第二行輸入8個數字,對應每一位第二行都小于第一行,求最小的值xxxxxx對第一行每一位取余后等于第二行(x不小于第一行的每個數)(x不小于第一行的每個數)(x)

題目分析:

首先有式子xxx%a=ba=ba=b,xxx%c=dc=dc=d,先設第一個滿足條件的xxxx1x1x1對于每個滿足題意的xxx,都有x=n?LCM(a,c)+x1x=n*LCM(a,c)+x1x=n?LCM(a,c)+x1LCM(a,c)LCM(a,c)LCM(a,c)aaaccc的最小公倍數,這點可以自行證明。此時令m=LCM(a,c)m=LCM(a,c)m=LCM(a,c)

隨后,若引入一個新的e,fe,fe,fxxx%e=fe=fe=f,則xxx要在滿足x=n?LCM(a,c)+x1x=n*LCM(a,c)+x1x=n?LCM(a,c)+x1的情況下查找滿足新式子的最小x2x2x2,隨后更新mmm,因為之后滿足的xxxx2x2x2的差值又要滿足被a,c,ea,c,ea,c,e整除,因此就要將mmm更新為m=LCM(m,e)m = LCM(m,e)m=LCM(m,e),以此類推,求得最后一個滿足的最小xxx即為答案。

復雜度大概是ans除一個階乘吧,不太好算,但是比暴力枚舉快一些

代碼:

#include<iostream> #include<algorithm> #include<stdio.h> #include<string> #include<string.h> #include<math.h> typedef long long ll;using namespace std;int m, n; struct P {int a, b; }p[8];bool cmp(P a, P b) {return a.a < b.a; }int gcd(int a, int b) {//gcd模板,求最大公約數return (b ? gcd(b, a % b) : a); }int lcm(int a, int b) {//根據gcd求最小公倍數return a / gcd(a, b) * b; }int main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);//c++操作,不用管他for (int i = 0; i < 8; i++) cin >> p[i].a;for (int i = 0; i < 8; i++) cin >> p[i].b;//兩行輸入m = p[0].a, n = p[0].b + p[0].a; int j;//初始化,此時m每次加第一個a,n為滿足第一對的最小值for (int i = 1; i < 8; i++) {for (j = n; ; j += m) {//j被初始化為當前最小值每次加mif (j % p[i].a == p[i].b && j % p[i - 1].a == p[i - 1].b) {//判斷成立,更新n和m,退出當前層循環n = j, m = lcm(m, p[i].a); break;}}}cout << n << endl;return 0; } /* 2 3 5 7 11 13 17 19 1 2 4 6 10 12 16 18 */

總結

以上是生活随笔為你收集整理的一道GCD LCM题目题解的全部內容,希望文章能夠幫你解決所遇到的問題。

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