数学--数论--HDU-2698 Maximum Multiple(规律)

2020-11-06 00:14:53 浏览数 (1)

代码语言:javascript复制
Given an integer nn, Chiaki would like to find three positive integers xx, yy and zzsuch that: n=x y zn=x y z, x∣nx∣n, y∣ny∣n, z∣nz∣n and xyzxyz is maximum. 

Input

代码语言:javascript复制
There are multiple test cases. The first line of input contains an integer TT (1≤T≤1061≤T≤106), indicating the number of test cases. For each test case: 
The first line contains an integer nn (1≤n≤1061≤n≤106). 

Output

代码语言:javascript复制
For each test case, output an integer denoting the maximum xyzxyz. If there no such integers, output −1−1 instead. 

Sample Input

代码语言:javascript复制
3
1
2
3

Sample Output

代码语言:javascript复制
-1
-1
1 

只有因子中有4或者有3才能被拆成 X Y Z=N,然后打了表验证。 最后wa了好几次,是因为int和int计算之后还是int就算赋值给long long . 打表代码

代码语言:javascript复制
#include <bits/stdc  .h>
using namespace std;
int main()
{
	int T;
	scanf("%d", &T);
	while (T--)
	{
		int n;
		for (int n = 1; n <= 100; n  )
		{
			int maxt = -1;
			int a, b, c;
			for (int x = 1; x <= n; x  )
			{
				for (int y = 1; y <= n - x; y  )
				{
					int z = n - x - y;
					if (z && n % x == 0 && n % y == 0 && n % z == 0)
					{
						if (maxt < x * y * z)
						{
							a = x;
							b = y;
							c = z;
						}
						maxt = max(maxt, x * y * z);
					}
				}
			}
			printf("%d:] %d %d %dn", n, maxt, a, b, c);
			if (n % 12 == 0)
				printf("n");
		}
	}
	return 0;
}

AC

代码语言:javascript复制
#include <bits/stdc  .h>
using namespace std;
int main()
{
	int T;
	long long  n,x,y,z;
	long long sum;
	scanf("%d", &T);
	while (T--)
	{
		scanf("%lld", &n);
		if ((n % 3) == 0)
		{
			x = y = z = n / 3;
			sum = x * y * z;
			if (x   y   z == n)
				printf("%lldn", sum);
			else
				puts("-1");
		}
		else if ((n % 4) == 0)
		{
			x = y = n / 4, z = n / 2;
			sum = x * y * z;
			if (x   y   z == n)
				printf("%lldn", sum);
			else
				puts("-1");
		}
		else
			puts("-1");
	}
}

0 人点赞