最大公約数が他のすべてに共通するように、シーケンス内の数値を除外します。除外されたもののインデックスとその最大公約数を見つけます。
これは私のコードです:
#include <iostream>
using namespace std;
int gcd(int x, int y) {
while (y) {
int r=x%y;
x=y;
y=r;
}
return x;
}
int pcd(int arr[], int u, int w) {
int temp=arr[u];
arr[u]=0;
int result=0;
for (int i=1; i<=w; i++) {
result=gcd(result, arr[i]);
}
arr[u]=temp;
return result;
}
int main() {
int n;
cin>>n;
int a[100000];
for (int i=1; i<=n; i++) {
cin>>a[i];
}
int t=0;
int v;
for (int j=1; j<=n; j++) {
if (pcd(a, j, n)>t) {
t=pcd(a, j, n);
v=j;
}
}
cout<<v<<" "<<pcd(a, v, n);
}
コードを高速化するにはどうすればよいですか?制限時間を超えて実行されています。
一方向にGCDを適用した結果を累積することにより、プレフィックスGCDリストとサフィックスGCDリストを維持します。次に、リストを繰り返し処理してGCD(prefix[i], suffix[i])
、最大値を確認します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加