https://vjudge.net/problem/CodeForces-1047C

说明:第一次记录的时候代码是超时的,本校校内赛出题人改编的,数据被缩小了,没有再cf上ac就贴了,很抱歉。另外,也不需要map这个东西,因为我做的校内赛的题a[i]被改成1e8,数组放不下所以需要map,而原题的数据是够范围的。修正时间:2019.7.27.14:26

题意:有n个数,他们有个最大公约数设为maxxgcd,要删去最少个数,使得剩下的数的gcd大于maxxgcd。

解题:先求出原来的数的最大gcd,每个数除以maxxgcd,之后所有数的gcd为1。用分解质因数,最多数拥有的质因子便是新的gcd,大于1就行,除掉那些不含该质因子的数。

比如有5个数6 4 8 16 32最大公约数为2

除以2后变成3 2 4 8 16,除以原本的maxxgcd=2之后,大家都有2这个质因数,唯独3没有,则3的引入全部的公约数中必然会导致公约数变小,3 2 4 8 16的最大公约数则是1,如果不要3,2 4 8 16的最大公约数是2.

返回到原始数组,删掉6之后,4 8 16 32的最大公约数就是4了,比原来的2大。

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<math.h>
#include<map>
#include<string>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std; int n;
int prime[];
bool vis[];
int num[];///质因子的个数
int a[];///原数组
int cnt;
int maxxgcd; int gcd(int a,int b)
{
if(b==)
return a;
return gcd(b,a%b);
} void init()
{
memset(vis,true,sizeof(vis));
cnt=;
for(int i=;i<;i++)
{
if(vis[i])
prime[cnt++]=i;
for(int j=;j<cnt && prime[j]*i<;j++)
{
vis[ i*prime[j] ]=false;
if(i%prime[j]==)
break;
}
}
} int main()
{
init();
while( scanf("%d",&n)!=EOF )
{
memset(num,,sizeof(num));///每次清0
maxxgcd=;
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
maxxgcd=gcd( maxxgcd,a[i] );
}
for(int i=;i<=n;i++)
a[i]=a[i]/maxxgcd;
int maxx=-;
for(int i=;i<=n;i++)
{
int x=a[i];
///原本的错误代码是for(int j=0;j<cnt;j++) cnt至少也是1000级的,n*cnt直接超时
for(int j=0;prime[j]*prime[j]<=x;j++)///避免找全部素数,减少时间
{
if( x%prime[j]== )
{
num[ prime[j] ]++;///小素数直接用数组存
maxx=max( num[ prime[j] ],maxx);
while(x%prime[j]==)
x=x/prime[j];
}
if(x==)
break;
}
if(x!=)///遍历完10000以内的素数后,如果x还大于1,则是大素数,大素数用map存
{
num[x]++;
maxx=max(num[x],maxx);
}
}
if(maxx==-)///若没有不同的质因子,此时a[i]必然全部都是1,也就没办法获取任何一个素数因子,不会改变maxx
printf("-1\n");
else
printf("%d\n",n-maxx);
}
return ;
}

cf1047C-Enlarge GCD-(欧拉筛+map+gcd+唯一分解定理)的更多相关文章

  1. 【BZOJ2818】Gcd 欧拉筛

    Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. Input 一个整数N Output 如题 Sample Input 4 Sam ...

  2. 【BZOJ 2818】gcd 欧拉筛

    枚举小于n的质数,然后再枚举小于n/这个质数的Φ的和,乘2再加1即可.乘2是因为xy互换是另一组解,加1是x==y==1时的一组解.至于求和我们只需处理前缀和就可以啦,注意Φ(1)的值不能包含在前缀和 ...

  3. noip复习——线性筛(欧拉筛)

    整数的唯一分解定理: \(\forall A\in \mathbb {N} ,\,A>1\quad \exists \prod\limits _{i=1}^{s}p_{i}^{a_{i}}=A\ ...

  4. [51NOD1181]质数中的质数(质数筛法)(欧拉筛)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1181 思路:欧拉筛出所有素数和一个数的判定,找到大于n的最小质 ...

  5. POJ-3126.PrimePath(欧拉筛素数打表 + BFS)

    给出一篇有关素数线性筛和区间筛的博客,有兴趣的读者可以自取. 本题大意: 给定两个四位的素数,没有前导零,每次变换其中的一位,最终使得两个素数相等,输出最小变换次数.要求变换过程中的数也都是素数. 本 ...

  6. Bi-shoe and Phi-shoe(欧拉筛)

    Bamboo Pole-vault is a massively popular sport in Xzhiland. And Master Phi-shoe is a very popular co ...

  7. 【BZOJ 2190】【SDOI 2008】仪仗队 欧拉筛

    欧拉筛模板题 #include<cstdio> using namespace std; const int N=40003; int num=0,prime[N],phi[N]; boo ...

  8. 素数筛&&欧拉筛

    折腾了一晚上很水的数论,整个人都萌萌哒 主要看了欧拉筛和素数筛的O(n)的算法 这个比那个一长串英文名的算法的优势在于没有多次计算一个数,也就是说一个数只筛了一次,主要是在%==0之后跳出实现的,具体 ...

  9. 欧拉筛,线性筛,洛谷P2158仪仗队

    题目 首先我们先把题目分析一下. emmmm,这应该是一个找规律,应该可以打表,然后我们再分析一下图片,发现如果这个点可以被看到,那它的横坐标和纵坐标应该互质,而互质的条件就是它的横坐标和纵坐标的最大 ...

随机推荐

  1. 踩坑rosbag --clock

    将rosbag的数据feed给lego-loam,输出地图.另外写了一个滤波节点,订阅地图,进行滤波操作,再发布出来. 由于输入给lego-loam的数据来自于rosbag,所以需要rosbag提供时 ...

  2. 工控随笔_08_西门子_Win10安装Step7.V5.6中文版授权管理器不能正常启动

    随着Windows系统的不断升级,西门子工控软件也不断升级,但是有时候在安装西门子 软件的时候会出现授权管理器不能正常启动的情况. 图  Step7 因为自动许可证管理器不能正常打开 如上图所示,报S ...

  3. VS2017编译GDAL(64bit)+解决C#读取Shp数据中文路径的问题

    编译GDAL过程比较繁琐,查阅了网上相关资料,同时通过实践,完成GDAL的编译,同时解决了SHP数据中文路径及中文字段乱码的问题,本文以“gdal-2.3.2”版本为例阐述整个编译过程. 一.编译准备 ...

  4. Error in loadNamespace 的解决之道

    Error in loadNamespace(j <- i[[1L]], c(lib.loc, .libPaths()), versionCheck = vI[[j]])   在构建比较复杂的环 ...

  5. 我的第二本译作《精通OpenStack》上架啦:前言、目录和样章

    1. 前言 今天,随着新功能和子项目的增加,OpenStack已成为一个不断扩展的大型开源项目.随着数以百计大型企业采用并不断为OpenStack生态系统做出贡献,OpenStack必将成为下一代私有 ...

  6. g2opy 记录

    20190429 10:31 之前安装了g2opy,g2o也一直没好好学,跑通了slam14讲第13章的单目稠密重建.想要改写成 python版,开始仔细研究g2opy的用法.

  7. Web API的接口访问安全性

    使用签名获取Token 首先我们自定义appkey.appSecret.可用GUID随机生成,AppSecret要不定期更换.然后放到配置文件中. Appkey=1AF62C68-B970-46E7- ...

  8. Immutable 学习

    1.什么是Immutable Data? Immutable Data 就是一旦创建,就不能再被更改的数据.对 Immutable 对象的任何修改或添加删除操作都会返回一个新的 Immutable 对 ...

  9. 设置 P2415Q & P2715Q 显示器使其支持 HDMI 2.0 启用 4k@60hz

    简介:2016 年 2 月后购买的 Dell P2415Q 和 P2715Q 显示器,支持 HDMI 2.0,但是默认启用的是 HDMI 1.4. HDMI 2.0 默认没有启用 Dell P2415 ...

  10. MySQL5.7.17解压版安装

    首先将mysql解压,公司的mysql解压后自带my.ini文件,结构如下: 在my.ini文件中配置的data路径在my文件夹下,需要删掉,然后修改my.ini文件中basedir和datadir路 ...