首页 > 其他分享 >codeforces 1047C. Enlarge GCD(数学)

codeforces 1047C. Enlarge GCD(数学)

时间:2023-02-04 11:03:49浏览次数:43  
标签:prime GCD 1047C int pri codeforces mp ans include


codeforces 1047C. Enlarge GCD(数学)_i++

codeforces 1047C. Enlarge GCD(数学)_i++_02

codeforces 1047C. Enlarge GCD(数学)_ios_03

题意:

给出n个数,求出最少删除几个数可以扩大最大公因子。

AC代码:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<iterator>
using namespace std;
int s[300009],pri[4000];
int cnt;
map<int,int> mp;
map<int,int>::iterator it;
int gcd(int a,int b)
{
if(b==0)
return a;
else
return gcd(b,a%b);
}

void isprime()
{
bool prime[4000];
memset(prime,1,sizeof(prime));
for(int i=2;i<3880;i++)
{
if(prime[i])
{
pri[cnt++]=i;
mp[i]=0;
for(int j=i+i;j<3880;j+=i)
{
prime[j]=false;
}
}
}
}

int main()
{
int n,t;
mp.clear();
cnt=0;
isprime();
scanf("%d",&n);
scanf("%d",&s[0]);
t=s[0];
for(int i=1;i<n;i++)
{
scanf("%d",&s[i]);
t=gcd(t,s[i]);
}
for(int i=0;i<n;i++)
{
s[i]/=t;
}
for(int i=0;i<n;i++)
{
for(int j=0;j<cnt;j++)
{
if(s[i]%pri[j]==0)
{
mp[pri[j]]++;
while(s[i]%pri[j]==0)
{
s[i]/=pri[j];
}
}
}
if(s[i]>1)
{
if(mp.count(s[i])==0)
{
mp[s[i]]=1;
}else
{
mp[s[i]]++;
}
}
}
int ans=-1;
for(it=mp.begin();it!=mp.end();it++)
{
ans=max(ans,it->second);
}
if(ans!=0)
printf("%d\n",n-ans);
else
printf("-1\n");
return 0;
}

 

标签:prime,GCD,1047C,int,pri,codeforces,mp,ans,include
From: https://blog.51cto.com/u_15952369/6036927

相关文章

  • CodeForces 948A
    DescriptionBobisafarmer.Hehasalargepasturewithmanysheep.Recently,hehaslostsomeofthemduetowolfattacks.Hethusdecidedtoplacesomeshephe......
  • Codeforces 1322 B. Count Subrectangles(贪心)
    题意:给出序列和序列矩阵是由和决定的问你可以从中截取多少个面积为显然可知的一个性质那就是当序列连续长度为,序列连续长度为,时这个部分序列形成的......
  • Codeforces 1322 A. Unusual Competitions
    题意:给出一个含有的字符串,让你可以选择一个区间进行重新排序,问一共选择的区间长度是多少可以使得字符串最后变成我们只需要从头开始遍历然后找到这种字符,并且使得和......
  • Codeforces 1316 B. String Modification
    题意:反转一个字符串,反转规则为从字符串首字母开头,长度为,反转问一个$k$时会得到一个新串,求字典序最小的新串和,如果字典序相同,则输出最小的。比赛时被卡,疯狂,其实举......
  • Codeforces 1316 D. Nash Matrix(dfs)
    题意:给出一个的棋盘和每个棋盘位置最后能走到的位置,如果一直走不停下来就是,可以停下来就是走到的最后位置,让你输出每个位置的操作字符,上下左右和,停在此位置。我们先找......
  • 扩展欧几里得(exgcd)
    这里先说一下最大公约数怎么求,辗转相除法都会用,这里讲一下站桩相除法的原理。例如两个数假设这两个数大小,设是这两个数的最大公约数。可得因为这里都是一个正整数不会对最......
  • Codeforces1260 E Tournament(贪心)
    Description:Youareorganizingaboxingtournament,wherenboxerswillparticipate(ispowerof),andyourfriendisoneofthem.Allboxershavedifferents......
  • Codeforces 1155D Beautiful Array
    给你n个数字的数组然后还有一个x,你可以选择一段区间乘上x,输出最大子段和。用一个二维dp来做就行了AC代码:#include<cstdio>#include<cstring>#include<iostream>#include<......
  • codeforces 1257E The Contest(lis)
    题意:3堆数,要求使得第一堆的数为前缀,第三堆数为后缀,第二堆数为剩下的数,要求最少调整多少个数的位置使得要求成立。其实就是就把a1,a2,a3排个序然后拼成一个数组,问题转为一个......
  • codeforces 1257C Dominated Subarray
    题意就是找到一个最小的子区间使得这个区间中只有一个数的个数为2.AC代码:#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<vector>#inclu......