CF1674A的题解

osfly / 2023-08-25 / 原文

一道简单的题目

先考虑 0 0 的情况

很显然,有两种情况:

  1. \(y\) 不是 \(x\) 的倍数

  2. \(\Large \frac{y}{x}\) 无法被分解成 \(b\) 的乘方

如果不满足上述两种情况,我们只需要将 \(b\)\(1\) 遍历到 \(\Large \frac{y}{x}\) ,找到解输出即可。

特别的,如果 \(x=y\) ,那么 \(a=b=1\)

那就很简单啦~

#include<cstdio>

int t;
int x,y;

int main()
{
	scanf("%d",&t);
	while(t--)
	{
		bool yes=1;
		scanf("%d%d",&x,&y);
		if(y%x)
		{
			printf("0 0\n");//情况1
			continue;
		}
		if(x==y)
		{
			printf("1 1\n");
			continue;
		}
		y/=x;
		for(int i=2;i<=y;i++)
			if(y%i==0)
			{
				int tmp=y;
				bool flag=1;
				int cnt=0;
				while(tmp>1)
				{
					if(tmp%i==0) tmp/=i,cnt++;
					else
					{
						flag=0;
						break;
					}
				}
				if(flag)
				{
					printf("%d %d\n",cnt,i);
					yes=1;
					break;
				}
			}
		if(!yes) printf("0 0\n");//情况2
	}
	
	return 0;
}