51nod挑的部分5级题
Posted ytytzzz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51nod挑的部分5级题相关的知识,希望对你有一定的参考价值。
最近心情不好所以写代码来获得快落
4级题有点难做?然后就开始挑简单的5级题开始写
然后准备记录一些自己没有做出来
参考讨论区或者博客才做出来的题目
额这个题参考了讨论区
令 t = n!
1/t = 1/x + 1/y , 0 < x <= y 的正整数解计数, n <= 1e6
考虑对式子进行变换
1/t = (x + y) / xy
xy = t * (x + y)
我们这时候应该有一个反应,配方有
(x - t) * (y - t) = t * t
所以考虑统计 t * t 的因子数就可以了
分解质因数即可
1 n, m, k = int(input()), 1, 1000000007 2 v = [0 for i in range(n + 1)] 3 p = [0 for i in range(n + 1)] 4 for i in range(2, n + 1): 5 if not v[i]: 6 p[0] += 1 7 p[p[0]] = i 8 t, j = 1, i 9 while j <= n: 10 t += n // j * 2 11 j *= i 12 m = m * t % k 13 for j in range(1, p[0] + 1): 14 if i * p[j] > n: 15 break 16 v[i * p[j]] = 1 17 if i % p[j] == 0: 18 break 19 print ((m + 1) * pow(2, k - 2, k) % k)
以上是关于51nod挑的部分5级题的主要内容,如果未能解决你的问题,请参考以下文章