CF 1047 C - Enlarge GCD [素数筛]
传送门:http://codeforces.com/contest/1047/problem/C
题意:给出n个数字,求最少删除几个数可以使剩下的数字的GCD大于n个数字的GCD
思路:最开始想的是先遍历求N个数的GCD,然后外层循环从i=g+1(g=GCD)开始,内层从j=1开始找a[j]%i==0的个数t,
求出最大的个数,如果求出的个数不为零,输出n-t,否则输出-1,但这样会超时,要优化;
看了别人的题解,要用到素数筛的方法。
第一步都是遍历求g=GCD。第二步求a[i]/g出现的次数。接下来还是二重循环,内层循环用素数筛的方法替换了。
代码如下:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 3e5+9;
const int maxnum = 1.5e7+9;
int a[maxn],cnt[maxnum];
int prime[maxnum];
int gcd(int a,int b)
{
return b?gcd(b, a%b):a;
}
int main()
{
int n;
scanf("%d",&n);
int g=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
g=gcd(g,a[i]);
}
for(int i=1;i<=n;i++)
{
cnt[a[i]/g]+=1;
}
int ans=0;
for(int i=2;i<maxnum;i++)
{
if(!prime[i])
{
int t=0;
for(int j=i;j<maxnum;j+=i)
{
prime[j]=1;
t+=cnt[j];
}
ans=max(t,ans);
}
}
if(!ans)
puts("-1");
else
cout<<n-ans<<endl;
return 0;
}
CF 1047 C - Enlarge GCD [素数筛]的更多相关文章
- CF 1047 C. Enlarge GCD
传送门 [http://codeforces.com/contest/1047/problem/C] 题意 给你n个数,移除最少的数字使剩下的数字GCD大于初始GCD 思路 需要一点暴力的技巧,先求出 ...
- BZOJ 2818 GCD 素数筛+欧拉函数+前缀和
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2818 题意:给定整数N,求1<=x,y<=n且Gcd(x,y)为素数的数对( ...
- Codeforces Round #511 (Div. 2)-C - Enlarge GCD (素数筛)
传送门:http://codeforces.com/contest/1047/problem/C 题意: 给定n个数,问最少要去掉几个数,使得剩下的数gcd 大于原来n个数的gcd值. 思路: 自己一 ...
- Enlarge GCD(素数筛)
题意 删去最少的数,使gcd变大 题解 只要保留相同素数因子最多的数即可. 素数筛. C++代码 #include<bits/stdc++.h> using namespace std; ...
- Codeforces Round #511 (Div. 2):C. Enlarge GCD(数学)
C. Enlarge GCD 题目链接:https://codeforces.com/contest/1047/problem/C 题意: 给出n个数,然后你可以移除一些数.现在要求你移除最少的数,让 ...
- codeforces 414A A. Mashmokh and Numbers(素数筛)
题目链接: A. Mashmokh and Numbers time limit per test 1 second memory limit per test 256 megabytes input ...
- Help Hanzo (素数筛+区间枚举)
Help Hanzo 题意:求a~b间素数个数(1 ≤ a ≤ b < 231, b - a ≤ 100000). (全题在文末) 题解: a~b枚举必定TLE,普通打表MLE,真是头疼 ...
- 素数筛 poj 2689
素数筛 #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; ...
- BestCoder Round #85 hdu5778 abs(素数筛+暴力)
abs 题意: 问题描述 给定一个数x,求正整数y,使得满足以下条件: 1.y-x的绝对值最小 2.y的质因数分解式中每个质因数均恰好出现2次. 输入描述 第一行输入一个整数T 每组数据有一行,一个整 ...
随机推荐
- C++编程学习(一) 概述
从一年前开通博客,陆陆续续写了一些总结类的东西,但是一直没push到网上.现在发现,分享自己的笔记也是自身学习.与他人交流的好方式.从今天开始,我会经常的push一些学习笔记到博客中,先从C++开始吧 ...
- ng : File C:\Users\baron\AppData\Roaming\npm\ng.ps1 cannot be loaded because running
一. Windos PowerShell 选择 管理员身份运行二.set-ExecutionPolicy RemoteSigned 然后更改权限为A 三.get-ExecutionPolicy 查看当 ...
- WebSocket在建立连接时通过@PathParam获取页面传值
最近用Java下使用WebSocket,有一个需求,在页面与Java后台建立连接的时候获取页面上提供的参数,也就是在@OnOpen注解的方法里面获取一次页面的参数,有一个很简单的方法可以获得.即使用@ ...
- go简单文件服务器
go文件服务器 go语言实现的简单文件服务器 github
- Python csv文件操作
一.open文件打开和with open as 文件打开的区别 file= open("test.txt","r") try: for line in file ...
- Mysql--主库不停机搭建备库
参考:http://blog.csdn.net/luozuolincool/article/details/38494817 mysqldump --skip-lock-tables --single ...
- jQuery.ajax提交JSON数据
$.ajax({ type: 'POST', url: "URL", contentType:'application/json', //需要加contentType crossD ...
- js数组,字符转换;key_value获取
js 数组转字符串js 字符串转数组arr.join(",");String.split(","); 对象的所有keys Object.keys(val)对象的 ...
- CF #610Div2 B2.K for the Price of One (Hard Version) (dp解法 && 贪心解法)
原题链接:http://codeforces.com/contest/1282/problem/B2题目大意:刚开始有 p 块钱,商店有 n 件物品,你每次可以只买一件付那一件的钱,也可以买 k 件只 ...
- CTF -攻防世界-web新手区
直接f12出来 先用get后加/?a=1 然后火狐装hackbar(老版本)f12 post b=2 搞定 Hackbar:https://github.com/Mr-xn/hackbar2.1.3 ...