emmm真是简短的题意,真是妙题一个
假设原数组的gcdgcdgcd为ggg
考虑唯一分解的形式:
gcd=∏pimin(c1,c2,c3....ci)gcd=\prod p_i^{min(c1,c2,c3....c_i)}gcd=∏pimin(c1,c2,c3....ci​)​
先把每个ai/g每个ai/g每个ai/g,
现在g=gcd(a1....an)=1,我们需要把g变得更大g=gcd(a1....an)=1,我们需要把g变得更大g=gcd(a1....an)=1,我们需要把g变得更大
假设变成了g1g1g1,可以说,g1g1g1是个素数的情况一定更优,如果g1g1g1是一个合数,那么aia_iai​中包含它的因子也必定包含g1/dg1/dg1/d的形式,所以g1g1g1是素数的情况一定不会更差
而素数的个数有n/lognn/lognn/logn个.
如果我们之前枚举1.5∗107∗log(1.5∗107)=1.5∗107∗231.5*10^7*log(1.5*10^7)=1.5*10^7*231.5∗107∗log(1.5∗107)=1.5∗107∗23
这个复杂度是一定会超时的,如果改为1.5∗107/23=1061.5*10^7/23=10^61.5∗107/23=106.这个数量级情况下可以通过O(nlogn)O(nlogn)O(nlogn)的筛法.

/*
You held me down but I broke free,
I found the love inside of me.
Now I don't need a hero to survive
Cause I already saved my life.
*/
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1.5e7+5;
const int INF = 1e9+7;
typedef long long ll;
typedef pair<int,int> pii;
#define all(a) (a).begin(), (a).end()
#define pb(a) push_back(a)
int in[maxn];
const int maxm = 3e5+2;
int a[maxm];
//筛子
vector<int> pr;bool vis[maxn];
void table(int n){for(int i=2;i<=n;i++){if(!vis[i]) pr.push_back(i);for(auto p : pr){if(i*p>n) break;vis[i*p] = true;if(i%p==0) break;}}
}
int gcd(int a,int b){if(!b)return a;return gcd(b,a%b);
}
int main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int MX = 0;int n;cin>>n;int g = 0;for(int i=1;i<=n;i++){cin>>a[i];g = gcd(a[i],g);}for(int i=1;i<=n;i++) a[i]/=g,MX = max(MX,a[i]),in[a[i]]++;int ans = n;table(MX);for(auto g1 : pr){int cnt = 0;for(int i = g1;i<=MX;i+=g1) cnt+=in[i];ans = min(ans,n-cnt);  }if(ans==n) cout<<-1<<"\n";else cout<<ans<<"\n";
}

CF1034A Enlarge GCD相关推荐

  1. Enlarge GCD CodeForces - 1034A(欧拉筛+最大公约数)

    题意: 给出n个数,删去其中一些使得总的gcd(最大公约数)最大 题目: Mr. F has n positive integers, a1,a2,-,an. He thinks the greate ...

  2. 【CodeForces - 1047C】Enlarge GCD(数学,枚举,预处理打表,思维)

    题干: F先生有n个正整数,a1,a2,...,an 他认为这些整数的最大公约数太小了,所以他想通过删除一些整数来扩大它 您的任务是计算需要删除的最小整数数,以便剩余整数的最大公约数大于所有整数的公约 ...

  3. 解题报告(十八)数论题目泛做(Codeforces 难度:2000 ~ 3000 + )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  4. Codeforces Round #511 (Div. 1) 题解

    在学校熬夜打$cf$找死啊. A - Enlarge GCD 先求个$gcd$,然后对于每个$a[i]$都除以$gcd$. 之后我们只需要统计每个质数整除的个数即可. 因为带上所有数的$gcd$一定是 ...

  5. LSNU寒假集训 题解

    目录 LSNU寒假第一场(基础算法+几何) A - Fifa and Fafa B - Anton and Lines C - Minimum path D - Thematic Contests E ...

  6. OI每周刷题记录——lrllrl

    看这标题就知道我是模仿的hzwer大佬,远程%%% 大佬的OI经历让蒟蒻我深受感触,为了晚一些AFO本蒟蒻也得加油了 从高二上期第一周开始计数,每个星期天更一次,一直更到我AFO 如果这是我此生最后一 ...

  7. CF803C Maximal GCD

    洛谷 CF 分析 考虑从 \(k\) 个数的 \(gcd\) 入手. 设他们的 \(gcd\) 为 \(d\) .则有 \(d|n\) ,那么这 \(k\) 个数都除以 \(d\) 剩下的和即为 \( ...

  8. 数论(一)——素数,GCD,LCM

    这是一个数论系列:) 一.素数 ×费马小定理 Theorem: 设 p 是一个素数,a 是一个整数且不是 p 的倍数,那么 很遗憾,费马小定理的逆定理是不成立的.对 a = 2,满足的非素数 n 是存 ...

  9. [CQOI2014]数三角形 组合数 + 容斥 + gcd

    推导过程 : 组合数+容斥原理+gcd 正确做法是暴力的一种优化,ans=所有情况 - 平行坐标轴的三点共线 - 斜线三点共线 如果快速求斜线三点共线: 首先要知道一个结论,对于点(a,b) (x,y ...

最新文章

  1. 【复盘】端端,棒棒哒!
  2. 加速电子化报销费控服务,易快报完成1500万美元B轮融资
  3. 轻松看懂机器学习十大常用算法
  4. 一文弄懂YOLO目标检测算法
  5. C语言文件读写操作主要函数及其用例
  6. AI以假乱真怎么办?TequilaGAN教你轻松辨真伪
  7. plsql存过声明游标_plsql--游标用法
  8. 【转载】正则表达式30分钟入门教程
  9. UVa 1635 无关的元素(唯一分解定理+二项式定理)
  10. 学会了C语言你可以独立开发这些项目。。。。
  11. PetShop数据访问层之消息处理(转Bruce Zhang)
  12. WinEdt Latex使用人家提供的模板时无法插入参考文献的方法
  13. 导线怎么用计算机平差,导线平差计算软件
  14. html5页面风格,H5页面设计风格大盘点!
  15. Word毕业论文排版 公式居中 编号右对齐 及交叉引用(使用MathType公式编辑器实现)
  16. 支付宝接口调用出现INVALID_PARAMETER错误,订单信息无法识别
  17. Python基础学习笔记【廖雪峰】
  18. 浙传计算机二级成绩查询,浙江传媒学院艺考成绩查询
  19. 部署harbor并实现https(SAN签发证书)
  20. 看了一遍蝴蝶效应1,在看到了一篇很好的《蝴蝶效应1》影评

热门文章

  1. 记一次逆向追踪请求ip的经历
  2. 小程序-Now you can provide attr wx:key for a wx:for to improve performance
  3. 使用tldr查询命令
  4. 使用微力同步进行多端同步开发
  5. ofo回应2.5亿元诉讼,网友:“有生之年,我的押金能退吗?
  6. 干货分享!35岁以后的Android程序员出路在哪里?完整PDF
  7. Centos7查看内网ip和外网ip
  8. Java字符和字符串
  9. c语言 迭代法求方程的根,编写用牛顿迭代法求方程根的函数
  10. 深度学习--常用数学符号