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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

UR #3 核聚变反应强度( gcd )

發布時間:2025/4/9 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UR #3 核聚变反应强度( gcd ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

tags: -分解質因數 , gcd

題目大意

給定\(n\)個數,求\(a_1\)\(a_i\)次小公約數

分析

易知次小公約數是\(\gcd\)的因數,于是用\(\gcd\)除去它的最小質因子即可。

沒有次小公約數的情況是\(\gcd = 1\),特判一下即可

直接枚舉的時間復雜度為\(O(n \sqrt a)\)

由于數據規模較大考慮優化

由于是求\(sgcd(a_1,a_i)\)于是結果一定是\(a_1\)的質因數組成,于是預處理\(a_1\)的質因數,然后每次處理時除去最小的即可,\(10^{12}< 2^{38}\)于是可以知道得到質因數的個數小于\(38\)個,于是時間復雜度就變為了\(O(50n)\)啦!

代碼

#include<iostream> #include<cmath> #include<cstring> #include<cstdio> #include<algorithm> #define LL long long #define maxn 100010 #define rep(i,a,b) for(int i = a; i <= b ;i++)using namespace std;int n; LL ys[40];LL gcd(LL a, LL b) {while (b ^= a ^= b ^= a %= b);return a; }int main(){scanf("%d",&n);LL l,tmp; int tot = 0;scanf("%lld", &l);tmp = l;for (int i = 2; 1ll * i * i <= l ;i ++)if (l % i == 0){ys[++tot] = i;while (l % i == 0) l /= i;}if (l != 1) ys[++tot] = l;l = tmp ;if (l != 1) printf("%lld ",l / ys[1]);else printf("-1 ");rep(i,2,n){LL aa;scanf("%lld",&aa);LL g = gcd(aa,l);if (g == 1) printf("-1 ");else rep (j,1,tot) if (g % ys[j] == 0 ){printf("%lld ",g / ys[j]);break; }}return 0; }

轉載于:https://www.cnblogs.com/bobble/p/9445219.html

總結

以上是生活随笔為你收集整理的UR #3 核聚变反应强度( gcd )的全部內容,希望文章能夠幫你解決所遇到的問題。

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