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

题意:

给出n个数,删去其中一些使得总的gcd(最大公约数)最大

题目:

Mr. F has n positive integers, a1,a2,…,an.

He thinks the greatest common divisor of these integers is too small. So he wants to enlarge it by removing some of the integers.

But this problem is too simple for him, so he does not want to do it by himself. If you help him, he will give you some scores in reward.

Your task is to calculate the minimum number of integers you need to remove so that the greatest common divisor of the remaining integers is bigger than that of all integers.

Input

The first line contains an integer n (2≤n≤3⋅105) — the number of integers Mr. F has.

The second line contains n integers, a1,a2,…,an (1≤ai≤1.5⋅107).

Output

Print an integer — the minimum number of integers you need to remove so that the greatest common divisor of the remaining integers is bigger than that of all integers.

You should not remove all of the integers.

If there is no solution, print «-1» (without quotes).

Examples

Input

3
1 2 4

Output

1

Input

4
6 9 15 30

Output

2

Input

3
1 1 1

Output

-1

Note

In the first example, the greatest common divisor is 1 in the beginning. You can remove 1 so that the greatest common divisor is enlarged to 2. The answer is 1.

In the second example, the greatest common divisor is 3 in the beginning. You can remove 6 and 9 so that the greatest common divisor is enlarged to 15. There is no solution which removes only one integer. So the answer is 2.

In the third example, there is no solution to enlarge the greatest common divisor. So the answer is −1.

分析:

这道题的思路取自素数筛,甚至是欧拉筛,我们要删除一些数字,
使得gcd增长,那么,我们就得把除去公共gcd之后的数进行一次筛选,
从最小的开始,我们求出那些个有相同质因数的数的数量的最大值。
举个例子: 对于2 4 4 8 8 ; 他们的gcd=2,
除以2以后:1 2 2 4 4,我们从2开始遍历“1~N”,
发现有4个是2的倍数,所以我们删除的是N-4=1。
或许一个例子不够形象: 对于3 6 6 9 ; 它们的gcd=3,
除以3以后:1 2 2 3,我们从2开始,2个是2的倍数, 1个是3的倍数,
之后5、7、11…没有这样的数了,所以删除N-2==2即可。
思路就是这样的。
特殊的,对于除完之后只剩下“1,1,1,1,…”这样的数,我们直接printf("-1\n")。
注意:容易超时,得想办法

AC代码

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
const int M=1.5e7+5;
const int N=3e5+10;
int sum[M];
int a[N],book[M];
int p[M],tot;
void init()
{memset(book,0,sizeof(book));for(int i=2; i<M; i++){if(!book[i])p[tot++]=i;for(int j=0; j<tot&&i*p[j]<M; j++)///减少复杂度{book[i*p[j]]=1;if(i%p[j]==0)break;}}/**for(int i=2; i<sqrt(M); i++){if(!book[i])p[tot++]=i;for(int j=i*2; j<M; j+=i)book[j]=1;}*/
}
int main()
{int n,x;scanf("%d",&n);init();int d=0;for(int i=1; i<=n; i++)//找到所有数的公因数{scanf("%d",&a[i]);d=__gcd(a[i],d);}for(int i=1; i<=n; i++){x=a[i]/d;///把所有的数都除以它们的gcd,则问题变为:保留最多的数,使得它们的gcd不等于1。for(int j=0; p[j]*p[j]<=x&&j<tot; j++)///枚举gcd的时候可以只枚举质数。可以通过线性筛将所有的质数O(n)时间复杂度筛出来{//除去公因数数之后将所有的数分解if(x%p[j]==0)sum[p[j]]++;//对素因数计数while(x%p[j]==0)x/=p[j];}if(x>1)sum[x]++;}int ans=0;for(int i=0; i<tot; i++)ans=max(sum[p[i]],ans);//找到最大的素因数出现次数if(ans==0)///假设所有数都等于1,显然无解。printf("-1\n");elseprintf("%d\n",n-ans);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/309753.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网桥工作在计算机网络的,网桥的作用和工作原理是什么

网络像一个巨大的蜘蛛网&#xff0c;连接着我们每个人的生活。对于网络&#xff0c;我们看不见也摸不着&#xff0c;但是却离不开它。无形的网络到底是怎么运作的呢?我们是如何通过网络实现人与人之间的交流的呢?今天小编就给大家普及一下网桥的知识&#xff0c;网桥在计算机…

[C++11]独占的智能指针unique_ptr的删除器

unique_ptr 指定删除器和 shared_ptr 指定删除器是有区别的&#xff0c;unique_ptr 指定删除器的时候需要确定删除器的类型&#xff0c;所以不能像 shared_ptr 那样直接指定删除器&#xff0c;举例说明&#xff1a; 代码如下: #include <iostream> #include <memory…

如何在Windows上使用Git创建一个可执行脚本?

长话短说&#xff0c;今天介绍如何在windows上使用Git上创建一个可执行的shell脚本。“首先我们要知道windows上Git默认添加的文件权限是:-rw-r--r--(对应权限值是644)&#xff0c;而通常创建的shell脚本都希望天然可执行&#xff0c;故有必要在Windows上使用Git管理shell脚本时…

计算机公共基础知识实验报告,20140902413 李雪瑞 计算机工程系实验报告345.docx...

20140902413 李雪瑞 计算机工程系实验报告345计算机工程系实验报告课程名称&#xff1a;Java程序设计成 绩&#xff1a;实验项目名称&#xff1a;JAVA语言实现面向对象编程基础指导教师&#xff1a;(签名)班级: 计科14-4班姓名: 李雪瑞学号: 20140902413一、实 验 目 的: 1. 通…

Most Unstable Array CodeForces - 1353A(数学+贪心+建设性算法)

题意&#xff1a; 给定 n, m&#xff0c;构造出一个长度为 n 的数组 a&#xff0c;使得数组的和为 m&#xff0c;在此条件下∑i1n−1∣ai−ai−1∣\sum_{i1}^{n-1}|a_{i}−a_{i-1}|i1∑n−1​∣ai​−ai−1​∣ 最大是多少&#xff1f; 题目&#xff1a; You are given two …

[C++11]共享智能指针shared_ptr指定删除器

当智能指针管理的内存对应的引用计数变为 0 的时候&#xff0c;这块内存就会被智能指针析构掉了。另外&#xff0c;我们在初始化智能指针的时候也可以自己指定删除动作&#xff0c;这个删除操作对应的函数被称之为删除器&#xff0c;这个删除器函数本质是一个回调函数&#xff…

基于 abp vNext 和 .NET Core 开发博客项目 - 再说Swagger,分组、描述、小绿锁

在开始本篇正文之前&#xff0c;解决一个 疯疯过 指出的错误&#xff0c;再次感谢指正。步骤如下&#xff1a;删掉.Domain.Shared层中的项目引用&#xff0c;添加nuget依赖包Volo.Abp.Identity.Domain.Shared&#xff0c;可以使用命令&#xff1a;Install-Package Volo.Abp.Ide…

[C++11]独占的智能指针unique_ptr的初始化和使用

std::unique_ptr 是一个独占型的智能指针&#xff0c;它不允许其他的智能指针共享其内部的指针&#xff0c;可以通过它的构造函数初始化一个独占智能指针对象&#xff0c;但是不允许通过赋值将一个 unique_ptr 赋值给另一个 unique_ptr。std::unique_ptr 不允许复制&#xff0c…

Two Arrays And Swaps CodeForces - 1353B(贪心+分类)

题意&#xff1a; 给定两个数组&#xff0c;你可以交换 k 次 两个数组的元素&#xff0c;问最后 a 数组的和最大可以是多少&#xff1f; 题目&#xff1a; You are given two arrays a and b both consisting of n positive (greater than zero) integers. You are also giv…

Abp v2.8.0发布 路线图

ABP框架和ABP商业版v2.8已经发布.这篇文章将涵盖这些发布中的新增内容和项目的中期路线图.ABP框架2.8有哪些新增内容?你可在GitHub的发行说明中看到所有的变更.这篇博客只包括重要的一些功能/变更.SignalR集成包我们已经发布了一个新的包用来集成SignalR到基于ABP框架应用程序…

贵州大学计算机专业的导师是谁,贵州大学计算机科学与信息学院导师介绍:王以松...

贵州大学计算机科学与信息学院导师介绍&#xff1a;王以松王以松&#xff0c;男&#xff0c;副教授&#xff0c;硕士研究生导师。主要研究方向&#xff1a;人工智能(知识表示与推理、逻辑程序设计)&#xff0c;语义网络等。 Em作者佚名次阅读2012-01-04王以松&#xff0c;男&am…

Board Moves CodeForces - 1353C(数学)

题意&#xff1a; 有一个 nn 的矩阵&#xff08;n 为奇数&#xff09;&#xff0c;每个矩阵单元有一个物品&#xff0c;每次操作你可将一个单元里的一个物品移动到该单元周围的八个单元里&#xff0c;问最后只有一个单元有物品的情况下&#xff0c;最少要多少次操作&#xff1…

BitArray虽好,但请不要滥用,又一次线上内存暴增排查

一&#xff1a;背景1. 讲故事前天写了一篇大内存排查在园子里挺火&#xff0c;这是做自媒体最开心的事拉&#xff0c;干脆再来一篇满足大家胃口&#xff0c;上个月我写了一篇博客提到过使用bitmap对原来的List<CustomerID>进行高强度压缩&#xff0c;将原来的List内存压缩…

2011年计算机基础知识试卷,2011年计算机一级考试理论试题:第六部分多选题

第6部分 信息与计算机基础知识 多选1.[ABC]通常来说&#xff0c;影响汉字输入速度的因素有 ______。(A)码长(B)重码率(C)是否有词组输入(D)有无提示行2.[BC]软件由______和______两部分组成。(A)数据(B)文档(C)程序(D)工具3.[BC]可以作为计算机存储容量的单位是______。(A)字母…

Constructing the Array CodeForces - 1353D(数据结构+分类+建设性算法)

题意&#xff1a; 有长度为 n 的数组 a &#xff0c;全为 0&#xff0c;接下来循环 n 次&#xff0c;每次选出一段最长的连续区间 [l, r]&#xff08;全为 0 &#xff0c;如果一样长&#xff0c;就选最左边的)。 如果 r−l1 是奇数&#xff0c;那么 a[lr2]ia[\frac{lr}{2}]ia…

[翻译]用于.NET Core的Windows窗体设计器发布

本文由微信公众号《开发者精选资讯》翻译首发&#xff0c;转载请注明来源今天我们很高兴地宣布&#xff0c;.NET Core 项目的 Windows 窗体设计器现在可以在 Visual Studio 2019 16.6 版中作为预览使用&#xff01;我们在 Visual Studio 16.7 预览版 1 中也提供了更新的设计器版…

运动会加油稿计算机学院,信息工程学院运动会加油稿

信息工程学院运动会加油稿1.你的汗水洒在跑道&#xff0c;浇灌着成功的花朵开放。你的欢笑飞扬在赛场&#xff0c;为班争光数你最棒。跑吧&#xff0c;追吧在这广阔的赛场上&#xff0c;你似骏马似离铉的箭。跑吧&#xff0c;追吧你比虎猛比豹强2你们挥舞着充满力量的双臂看着实…