zoukankan      html  css  js  c++  java
  • 51nod-1179-最大的gcd(数学)

    题目来源: SGU
    基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题
     收藏
     关注
    给出N个正整数,找出N个数两两之间最大公约数的最大值。例如:N = 4,4个数为:9 15 25 16,两两之间最大公约数的最大值是15同25的最大公约数5。
     
    Input
    第1行:一个数N,表示输入正整数的数量。(2 <= N <= 50000)
    第2 - N + 1行:每行1个数,对应输入的正整数.(1 <= S[i] <= 1000000)
    Output
    输出两两之间最大公约数的最大值。
    Input示例
    4
    9
    15
    25
    16
    Output示例
    5

    注意到数据最大是100w,我们可以用tot[i]记录i出现的次数,然后枚举所有的可能答案i,统计i,i*2,i*3...i*k的总数s,如果s>=2表示i可以达到。这个过程类似于素数筛的,
    所以复杂度是nlog(n);
     1 #include<iostream> 
     2 #include<cstdio>
     3 using namespace std;
     4 int s[50050];
     5 int tot[1000010];
     6 int main()
     7 {
     8     int n,i,j,k;
     9     scanf("%d",&n);
    10     for(i=1;i<=n;++i){
    11       scanf("%d",s+i);
    12       tot[s[i]]++;
    13      }
    14     for(i=1000000;i>=1;--i){
    15                     int tmp=0;
    16                     for(j=i;j<=1000000;j+=i){
    17                             tmp+=tot[j];
    18                             if(tmp>=2) break;
    19                         }
    20                         if(tmp>=2){
    21                             cout<<i<<endl;
    22                             break;
    23                             }
    24                 }
    25     return 0;
    26 } 
  • 相关阅读:
    谁知道怎么获得客户端的语系,不是encoding哦
    如何动态控制弹出窗体的大小
    维权成功!
    KFC的mm在练习做圣代
    CICD自动化发版系统设计简介
    java IO (File类)
    StringBuffer
    Arrays和比较器
    java正则
    Math和Random类
  • 原文地址:https://www.cnblogs.com/zzqc/p/8931306.html
Copyright © 2011-2022 走看看