40分蒟蒻求救
查看原帖
40分蒟蒻求救
75175
huanghaiyang楼主2020/10/7 10:47

40分蒟蒻又来了,感觉自己码力越来越差了

#include <bits/stdc++.h>
using namespace std;
const int maxn = 30010;
int n, m1, m2, k, cnt, t, ans = 1 << 30;
int prime[maxn];//打表素数 
int prime_m[maxn];//记录m的因数的个数 
int prime_l[maxn];//记录m的因数 
int check(int x)
{
	int k = sqrt(x);
	for(int i = 2 ; i <= k ; i ++)
		if(x % i == 0) return false;
	return true;
}
int main()
{
	scanf("%d %d %d", &n, &m1, &m2);
	if(m1 == 1)
	{
		printf("0");
		return 0;
	}
	for(int i = 2 ; i <= m1 ; i ++)//这里不能开平方优化时间哦,万一m是个质数呢 
		if(check(i)) prime[++ prime[0]] = i;
	for(int i = 1 ; i <= prime[0] ; i ++)
	{
		if(m1 % prime[i] == 0)
		{
			while(m1 % prime[i] == 0)
				prime_m[prime[i]] += m2, m1 /= prime[i];
			prime_l[++ prime_l[0]] = prime[i];
		} 
	}
	while(n --)
	{
		scanf("%d", &k);
		t = -1;//万一刚好能除尽,所以t不能赋值0 
		for(int i = 1 ; i <= prime_l[0] ; i ++)
		{
			if(k % prime_l[i] != 0) continue;
			else
			{
				cnt = 0;
				while(k % prime_l[i] == 0)
				{
					k /= prime_l[i];
					cnt ++;//统计该因数个数 
				}
				t = max(t, (int)ceil((double)prime_m[prime_l[i]] / cnt));
			}
		}
		if(t >= 0) ans = min(ans, t);
	}
	if(ans == 1 << 30)
	{
		printf("-1");
		return 0;
	}
	else printf("%d", ans);
	return 0;
}

1578四个点过了

2020/10/7 10:47
加载中...