A. The Meaningless Game(因子思维)

已经想到了,却不知道怎么处理,哎

k 1 , k 2 , k 3 . . . . . . . k n 设每次乘的数是k_1,k_2,k_3.......k_n

a = k 1 2 k 2 2 k 3 k 4 k n 设a=k_1^2k_2^2k_3k_4k_n

b = k 1 k 2 k 3 2 k 4 2 k n 2 那么b=k_1k_2k_3^2k_4^2k_n^2

, a , b g c d 问题就在这里,我开始想的是求出a,b的gcd

a / g c d = k 1 k 2 , b / g c d = k 3 k 4 k 5 那么a/gcd=k_1k_2,b/gcd=k_3k_4k_5

a b = = g c d 所以新的a*b==gcd

但是完全不对呀哎,毕竟k1,k2,k3…间可能也有公因子,求出来的gcd会更大

a b = k 1 3 k 2 3 . . . k n 3 \color{Red}所以注意到a*b=k_1^3k_2^3...k_n^3

a b t e m p 所以把a*b开三次方得到整数temp

t e m p a , b 且啊temp是a,b的因子

#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,a,b;
int gcd(int a,int b){
	return b==0?a:gcd(b,a%b);
}
map<int,int>m;
signed main()
{
	int temp=1,sumn;
	while(1)
	{
		sumn=temp*temp*temp;
		if(sumn>1e17)	break;
		m[sumn]=temp,temp++;
	}
	cin >> n;
	while(n--)
	{
		scanf("%lld%lld",&a,&b);
		int s=a*b;
		if(m[s]&&a%m[s]==0&&b%m[s]==0)	printf("YES\n");
		else	printf("NO\n");
	}
} 

猜你喜欢

转载自blog.csdn.net/jziwjxjd/article/details/107234419