P1069:Help!
查看原帖
P1069:Help!
338370
Merron楼主2020/8/28 11:57

RT

只有10分


#include <bits/stdc++.h>
using namespace std ;

int MAXSIZE = 100000 ;

int m1, m2 ;

int pri[100005] ;
bool p[100005] ;
int cnt = 0 ;

int MAX = 0 ;

int ans = 0x7fffffff ;

void check()
{
	//is prime:0
	// is not: 1
	p[0] = p[1] = 1 ;
	for (int i = 2 ;i <= MAXSIZE ;i ++)
	{
		if (p[i] == 0)
		{
			cnt ++ ;
			pri[cnt] = i ;
		}
		for (int j = 1 ;j <= cnt && i * pri[j] <= MAXSIZE ;j ++)
		{
			p[i * pri[j]] = 1 ;
			if (i % pri[j] == 0)
			{
				break ;
			}
		}
	}
}

int top ;

int P[100005] ;
int T[100005] ;

int n ;

int main()
{
	check() ;
	cin >> n ;
	cin >> m1 >> m2 ;
	for (int i = 1 ;pri[i] <= m1 ;i ++)
	{
		while(m1 % pri[i] == 0)
		{
			MAX = max(MAX, pri[i]) ;
			m1 /= pri[i] ;
			P[pri[i]] += m2 ;
		}
	}
	for (int i = 1 ;i <= n ;i ++)
	{
		int temp ;
		cin >> temp ;
		for (int j = 1 ;pri[j] <= MAXSIZE ;j ++)
		{
			T[pri[j]] = 0 ;
		}
		for (int j = 1 ;pri[j] <= temp ;j ++)
		{
			while(temp % pri[j] == 0)
			{
				MAX = max(MAX, pri[j]) ;
				temp /= pri[j] ;
				T[pri[j]] ++ ;
			}
		}
		int ans2 = 1 ;
		while(ans2 <= 10000)
		{
			bool ac = 1 ;
			for (int j = 1 ;pri[j] <= MAX ;j ++)
			{
				if (T[pri[j]] == 0 && P[pri[j]] > 0)
				{
					ac = 1 ;
					ans2 = 0x7fffffff ;
					break ;
 				}
 				else if (T[pri[j]] < P[pri[j]])
 				{
 					ans2 ++ ;
 					ac = 0 ;
					for (int k = 1 ;pri[k] <= MAX ;k ++)
					{
						T[pri[k]] *= 2 ;	
					}	
				}
			}
			if (ac)
			{
				break ;
			}
		}
		ans = min(ans, ans2) ;
	}
	if (ans = 0x7fffffff)
	{
		cout << -1 << endl ;
	}
	else
	{
		cout << ans << endl ;
	}
	return 0 ;
}
2020/8/28 11:57
加载中...