嗯切一题走人很开心。

gzy-50分比我还惨。

题意:有n个数,去掉尽量少的数使得剩下数的gcd变大。

首先把这n个数都除以gcd,就变成了去掉尽量少的数使得gcd不等于1。

可以枚举一个质数,然后统计这个质数是a数组中多少个数的约数。

线性筛,记录每个数最小的约数,每次除以约数,\(O(n\log a)\)。

Time Limit Exceeded on pretest 8

线性筛的时候顺便记录每个数去掉重复约数之后的数

\(2*3*5*7*11*13*17*19\),再乘23就炸了

每个数最多8个不同质因数

所以就是\(O(8n)\)的了

#include<bits/stdc++.h>
#define il inline
#define vd void
#define ll long long
il int gi(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
int pr[1000000],a[15000001],yes[15000001];
int d[15000001],dd[15000001];
int ans[1000000];
main(){
int n=gi(),g=0;
for(int i=1;i<=n;++i)a[i]=gi(),g=std::__gcd(g,a[i]);
for(int i=1;i<=n;++i)a[i]/=g;
for(int i=2;i<=15000000;++i){
if(!yes[i])pr[++pr[0]]=i,d[i]=pr[0],dd[i]=i;
for(int j=1;j<=pr[0]&&1ll*i*pr[j]<=15000000;++j){
yes[i*pr[j]]=1;
d[i*pr[j]]=j;dd[i*pr[j]]=dd[i]*pr[j];
if(i%pr[j]==0){dd[i*pr[j]]=dd[i];break;}
}
}
dd[1]=1;
int Ans=0;
for(int i=1;i<=n;++i){
a[i]=dd[a[i]];
while(a[i]!=1)++ans[d[a[i]]],a[i]/=pr[d[a[i]]];
}
for(int i=1;i<=pr[0];++i)Ans=std::max(Ans,ans[i]);
Ans=n-Ans;
if(Ans==n)Ans=-1;
printf("%d\n",Ans);
return 0;
}

最新文章

  1. 优化MySchool数据库设计之【巅峰对决】
  2. css实现div的高度填满剩余空间
  3. ORM
  4. avalon全选效果分析讲解
  5. 简单的gulpfile.js参数配置
  6. linux系统性能监视命令
  7. linux shell 脚本攻略学习19--sed命令详解
  8. 大数据时代之hadoop(五):hadoop 分布式计算框架(MapReduce)
  9. UVA - 10057 A mid-summer night&amp;#39;s dream.
  10. jQuery基本过滤选择器
  11. UEditor编辑器和php简单的实现socket通信
  12. win10外接键盘失灵
  13. ZigBee技术
  14. 通过Ajax方式上传文件(input file),使用FormData进行Ajax请求
  15. 建立一个单链表,并删除链表中值为W的元素
  16. [android]android Task 任务 简介
  17. pacman安装软件包出现损坏
  18. [转]jvm加载类规则
  19. hadoop 组件 hdfs架构及读写流程
  20. 【深度学习】理解dropout

热门文章

  1. swift知识点 [1]
  2. 搭建企业级NFS网络文件共享服务[二]
  3. C# 算法题系列(一) 两数之和、无重复字符的最长子串
  4. word用宏命令完美解决列表编号变黑块的问题
  5. November 8th 2016 Week 46th Tuesday
  6. 如何检查oracle的归档空间是否满了
  7. Curator 基本API
  8. [HNOI2005]汤姆的游戏
  9. django admin自定义
  10. HDU 1251 统计难题(字典树入门模板题 很重要)