• testC-I


    总时间限制: 
    20000ms
     
    单个测试点时间限制: 
    1000ms
     
    内存限制: 
    128000kB
    描述

    给你一组数,a1,a2,a3,⋯,an

    令:G=gcd(a1,a2,a3,⋯,an)

    现在从中任意删除一些数字,设剩下的数为:al1,al2,al3,⋯,alm

    再令:g=gcd(al1,al2,al3,⋯,alm)

    现要求G=g,问最多能删除多少数?

    输入
    第一行一个数n,第二行n个数a1,a2,a3,⋯,an。
    输出
    输出只有一个数,表示最多能删除多少数。
    样例输入
    3
    4 6 8
    样例输出
    1
    提示
    1≤n≤700
    1≤ai≤10000
     1 #include<iostream>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 
     6 const int INF=0x7f7f7f7f;
     7 
     8 int n;
     9 int a[705],f[10005];
    10 
    11 int read()
    12 {
    13     int x=0,f=1;char ch=getchar();
    14     while(ch<'0'||ch>'9'){if(ch=='-')f=-f;ch=getchar();}
    15     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    16     return x*f;
    17 }
    18 
    19 int gcd(int a,int b)
    20 {
    21     return b?gcd(b,a%b):a;
    22 }
    23 
    24 int main()
    25 {
    26     n=read();
    27     for(int i=1;i<=n;i++)
    28         a[i]=read();
    29     int g=0;
    30     memset(f,0x7f,sizeof(f));
    31     f[0]=0;
    32     for(int i=1;i<=n;i++)
    33     {
    34         g=gcd(g,a[i]);
    35         for(int j=10000;j>=0;j--)
    36         {
    37             int GCD=gcd(j,a[i]);
    38             f[GCD]=min(f[GCD],f[j]+1);
    39         }
    40     }
    41     printf("%d",n-f[g]);
    42     return 0;
    43 }
  • 相关阅读:
    处理器及其调度
    java面向对象
    操作系统概述
    mysql 基础操作
    java集合类详解
    java数组
    java方法
    Python—进程间通信
    Python—TCP的黏包问题以及UDP的分片问题
    Python—网络通信编程之tcp非阻塞通信(socketserver)
  • 原文地址:https://www.cnblogs.com/InWILL/p/6343230.html
Copyright © 2020-2023  润新知