zoukankan      html  css  js  c++  java
  • gcd

    题目描述

    Alice和Bob在玩数字游戏: 
    Alice随机给出n个整数a1、a2、……、an,要求Bob从这些数字中选择一个ai,用[1, 109]之间的任意整数进行替换(替换的数字可能和ai相同),希望替换后n个数的最大公约数尽可能大。 

    输入

    输入第一行为一个数字n 
    第二行包括n个用空格隔开的整数,表示Alice给出的n个数 

    输出
    输出一个数,表示替换后n个数的最大公约数
    样例输入
    3
    7 6 8
    样例输出
    2
    提示

    对于30%的数据,1<=n<=1000 

    对于100%的数据,2<=n<=106,1<ai<=109 

    首先你会发现暴力过不了,用欧几里得去查找公约数是O(n2)的,用前缀和是O(n log(n))的可以过,BUT我不会打...所以我用了一种玄学的方法,排个序然后去瞎搞判断一个数有几个约数,如果约数个数>=2就不找了:

    #include<bits/stdc++.h>
    using namespace std;
    int n,m;
    int a[100001];
    int ans=0;
    int main(){
        cin>>n;
        for(int i=1;i<=n;i++) cin>>a[i];
        sort(a+1,a+n+1);
        for(int i=a[2];i>=2;i--){
            int ji_lu=0;
            for(int j=1;j<=n;j++){
                if(a[j]%i!=0) ji_lu++;
                if(ji_lu>=2) break;
            }
            if(ji_lu<=1){
                ans=i;
                break;
            }
        }
        cout<<ans;
    }
  • 相关阅读:
    eclipse中包的位置
    404代码错误解决
    servlet-web.xml配置
    java web.xml配置servlet
    1031整理
    1030整理
    rownum
    存储过程和自定义函数的区别
    课堂整理
    练习
  • 原文地址:https://www.cnblogs.com/dai-jia-ye/p/10848633.html
Copyright © 2011-2022 走看看