12#WA求助
查看原帖
12#WA求助
1095195
aliah楼主2024/4/11 13:39

我的想法是找到一个整数k,然后看看这里有多少个k的倍数。由于ak的倍数一定是k的倍数,所以合数的倍数个数肯定小于等于它任意一个质因数的倍数个数,所以只需要找到每个质数的倍数个数便可 首先用a统计每个数字出现的次数 然后将a中每个数字分解质因数,所有出现过的质因数对应的倍数个数都加上当前这个数出现的个数。把这些个数放到b里。 然后在b中找最大值就是最后方案了 结果12#数据WA,求助 代码如下:

#include<bits/stdc++.h>
#include<map>
using namespace std;
int main()
{
	int i,j,n,x,ans=0;
	map<int,int> a,b;
	map<int,int>::iterator p;
	cin>>n;
	for(i=0;i<n;i++)
	{
		cin>>x;
		a[x]++;
	}
	for(p=a.begin();p!=a.end();p++)
	{
		x=p->first;
		for(i=2;i<=x;i++)
		{
			if(x%i==0)
				b[i]+=p->second;
			while(x%i==0)
				x/=i;
		}
	}
	for(p=b.begin();p!=b.end();p++)
		if(p->second>ans)
			ans=p->second;
	cout<<ans;
	return 0;
}
2024/4/11 13:39
加载中...