1 条题解
-
0
暴力做法:枚举,计算除它外的其他元素的最大公约数。时间复杂度为,超时。
我们可以预处理出两个数组和:
- 表示~的最大公约数
- 表示~的最大公约数
然后对于,只需要再求一遍即可。需要特判和。
时间复杂度为,可以通过。
AC code:
#include<bits/stdc++.h> #define ll long long using namespace std; const ll N=1e6+5; ll n,a[N],l[N],r[N]; int main(){ scanf("%lld",&n); for(ll i=1;i<=n;i++){ scanf("%lld",&a[i]); if(i==1) l[i]=a[i]; else l[i]=__gcd(a[i],l[i-1]); // c++自带的__gcd函数 } for(ll i=n;i>=1;i--) if(i==n) r[i]=a[n]; else r[i]=__gcd(a[i],r[i+1]); printf("%lld ",r[2]); // 除去a[1]外其他元素的最大公约数 for(ll i=2;i<n;i++) printf("%lld ",__gcd(l[i-1],r[i+1])); printf("%lld",l[n-1]); // 除去a[n]外其他元素的最大公约数 return 0; }
- 1
信息
- ID
- 607
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- (无)
- 递交数
- 148
- 已通过
- 53
- 上传者