【发布时间】:2020-03-17 17:29:31
【问题描述】:
Alice 最近学习了因式分解。鲍勃认为她没有 正确地学习了它,因此他决定测验她。鲍勃给 爱丽丝一个非常大的数字,并要求她找出 这个数字的因素。为了让她轻松一点,他 将数字表示为 N 个数字的乘积。爱丽丝很害怕 大数字,因此向您寻求帮助。你的任务很简单。 给定 N 个数字,你需要告诉不同因素的数量 这 N 个数的乘积。
输入输入的第一行包含一个整数 T,即测试用例的数量。
每个测试都以包含单个整数 N 的行开始。下一个 行由 N 个空格分隔的整数 (Ai) 组成。
输出对于每个测试用例,在单独的行上输出给定数字乘积的因子总数。
约束 1 ≤ T ≤ 100, 1 ≤ N ≤ 10, 2 ≤ Ai ≤ 1000000
我的答案
#include <bits/stdc++.h>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
long long int p = 1, a, c = 0;
while (n--) {
cin >> a;
p *= a;
}
for (int i = 1; i <= p; i++) {
if (p % i == 0)
c++;
}
cout << c << endl;
}
return 0;
}
在 Codechef 中编译我的程序时,只执行小数字。无法编译较大的数字。所以在 Codechef 中,结果显示“Time Limit Exceeded(TLE)”。
【问题讨论】:
-
另外,请停止使用在线评委和竞赛网站作为学习资源,因为它们不是。请选择a couple of good books 或上一两节课。
-
看看最坏的情况。十个 1000000 (1000000^10) 的乘积是 10^60。 10^60 次迭代,每次 1 纳秒将花费 3*10^43 年。即使限制为有符号的 64 位,每次一纳秒迭代所有正数也需要将近 300 年。你需要一种比蛮力搜索更聪明的方法,Alice 害怕大数字是对的。
-
不是求所有 Ai 的乘积,然后进行因式分解,你能找到每个输入的素因数,然后用各个素因数计算乘积的所有唯一因数吗?
-
这能回答你的问题吗? Factor a large number efficiently with gmp
标签: c++