【发布时间】:2020-07-29 18:49:56
【问题描述】:
我正在尝试解决这个问题:
输入:第一行包含一个整数T,它表示您需要解决的总案例。每个测试用例包含P和Q,用空格隔开,代表你需要处理的数字。
输出:打印由P和Q的最小因子和最大素因子相乘计算的结果。
约束:1 ≤ ???? ≤ 100 和 2 ≤ ????,???? ≤ 1000000
示例输入:2 210 84 6 12
样本输出:
Case #1: 14
Case #2: 6
说明:我们以第一种情况为例。数字 210 和 84 有几个相同的质因数,分别是 2、3 和 7。数字“2”是数字中最小的公质因数,而数字“7”是它们最大的公质因数。所以,结果一定是 2 和 7 的乘积,也就是 14。
这是我一直在工作的代码,我试图从给定的数字中找到因子,然后将因子存储到数组中,然后检查素数,但我觉得这不是正确的算法:(
void factor(int num1) {
int arrA[100000], a = 0, flag = 1;
//check factor
for (int i = 2; i <= num1; i++) {
if (num1 % i == 0) {
arrA[a] = i;
a++;
}
}
// check prime
for (int i = 0; i < a; i++) {
for (int j = 2; j < a; j++) {
if ((arrA[i] % j) == 0) {
flag = 0;
}
}
if (flag == 1) {
printf("%d ", arrA[i]);
}
flag = 1;
}
printf("\n");
}
【问题讨论】:
-
这是一次素因数分解的尝试吗?
-
int arrA[100000]已经处于灾难的边缘。将其移出堆栈。 -
您可能还想将您的价值除以素数并重新运行您的因式分解以捕获所有因素。此外,无需检查所有素数 - 当 arrA[i] 平方大于您的因数时,您可以停止。
-
将
j < a替换为j < arrA[i]。但是你的算法效率很低。 -
只是一个建议:虽然很可爱,但整个第一段完全无关紧要。你真的应该考虑用与之前所说的类似的东西来替换它。保持与提出的问题相关的文本。