最大公約数が他のすべてに共通するように、シーケンス内の数値を除外します。除外されたもののインデックスとその最大公約数を見つけます

hd_30102

最大公約数が他のすべてに共通するように、シーケンス内の数値を除外します。除外されたもののインデックスとその最大公約数を見つけます。

これは私のコードです:

#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]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ