如何找到一个数组的gcd列表,同时忽略0到n个元素(找到(n-1)个元素的gcd)?

时间:2017-04-28 14:02:04

标签: java algorithm greatest-common-divisor

我试图在java中解决竞争性编程问题 原始问题:你将获得N个虫子的强度。现在可以通过获取其余N-1个虫子的强度的GCD来计算虫子的相对强度。给定包含单个整数X的Q查询,您必须找到相对强度大于X的错误数。 其中

 1 <= N <= 10^5
 1 <= Q <= 10^5
 1 <= Ai <= 10^9
 1 <= X <= 10^5

我从10个TC中获得TLE。 任何人都可以帮我解决可行的解决方案吗?

我的代码:

public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    int n=sc.nextInt();
    int t=sc.nextInt();
    int []arr=new int[n];
    for (int i = 0; i < n; i++) {
        arr[i]=sc.nextInt();
    }
    arr=mergeSort(arr);
    int gcd=arr[0];
    for(int i = 1; i < n; i++){
         gcd = gcd(gcd, arr[i]);
    }
    while(t-->0){
        int comp=sc.nextInt();
        int count=0;
        if (arr[1]>gcd) {
            int tempgcd=arr[1];
            for(int i = 2; i < n; i++){
                 tempgcd = gcd(tempgcd, arr[i]);
            }
            if (tempgcd>comp) {
                ++count;
            }
        }
        if (gcd>comp) {
            count=count+n-1;
        }
        System.out.println(count);
    }
    sc.close();

}

1 个答案:

答案 0 :(得分:1)

制作两个辅助阵列 通过gcd从左到右填充L[] 通过gcd从右到左填充R[] 现在找到第i个bug的相对强度为gcd(L[i-1], R[i+1])

(可以进行优化)