社区讨论
虽然不能改,但数据实在太水了
P1069[NOIP 2009 普及组] 细胞分裂参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mhj12t2m
- 此快照首次捕获于
- 2025/11/03 18:59 4 个月前
- 此快照最后确认于
- 2025/11/03 18:59 4 个月前
我采用了质因数的思路解题,以下是分解质因数部分的代码:
CPPm1_ = m1; //创建m1的副本
for (int i = 2; i <= ceil(sqrt(m1)); ++i)
if (m1_ % i == 0 && is_prime(i))
{
pf[i] = 0;
while (m1_ % i == 0)
m1_ /= i, pf[i]++;
#ifdef local
printf("get %d^%d,left %d\n", i, pf[i], m1_);
#endif
}
代码中的
pf[] 是一个 map<int, int> 对象,pf[i] = j 表示 包含 个质因数 ,即(意即 整除 ,但不整除 )。
但是,对于
CPPfor 中的循环变量 ,我给定的上界是 ,会忽略大于之的质因数。这是质数判断中常用的优化,用在质因数分解中显然是不对的。只需构造这样一个数据,就能轻松干掉我的程序:1
10 1
2
计算可知,这个数据对应的答案是
-1,因为 中有因数 ,而 中没有。但是,因为 ,我的代码就会忽略 ,只记下 ,这导致它输出了 1。然而——
似乎显然地,本题数据中的 都是一些小质数的高次幂之积(它甚至想到了 的数据都没想到这种数据,令人忍俊不禁十分疑惑)。
回复
共 0 条回复,欢迎继续交流。
正在加载回复...