something about数论
1.https://www.luogu.org/problemnew/show/P3197
【越狱】题目要求的是越狱的状态数,总体思路是用所有可能的状态减去不越狱的状态 一共有 n个房间,m个宗教,则总状态数为 m^ n。那么不会越狱的状态就只考虑当前状态 与前一不同即可,则 m* (m1)^ (n1)。最后用个快速幂,即可。
2.https://www.luogu.org/problemnew/show/P2043
2.【质因子分解】因为这题数据小N<=10000,所以可以判断一下是否为质数,是否为因子,然后满 足条件的记个数,然后不停的除,计数。但注意当求是否为因子时,把 i 赋值给另一变量, 不然可能会除没。还找到一种神仙算法。
“
将一个质数不断除本来的阶乘最大数,并把这些商全部加起来。编程代码即为:
while (base > 0)
{
base /= prime;
count += base;
}
为什么呢?我们来想一想: (以100!举例)
假如我们把所有会贡献质因子的数列出来的话,就是这样:
1,2,3,4,5,6 …… 97,98,99,1001,2,3,4,5,6……97,98,99,100
我们不妨想一想,这当中有哪些会贡献一个2? 列出来的话,就是这样:
2 , 4 , 6 …… 98 , 1002,4,6……98,100
可以看到,正好占了[ n/2 ][n/2]个。
那这些数中,又有几个数会再贡献一个2?
4, 8, 12 …… 96, 1004,8,12……96,100
也可以看出,占了[n/2^2][n/22]个。
这样就容易看出,为100!贡献的2共有: [n/2]+[n/2^2]+[n/2^3]+……[n/2]+[n/22]+[n/23]+……
这样虽然是个无穷数列,但是一旦2^k>n2k>n,后面就全是0。
所以我们仅需计算[n/2]+n[n/2^2]+……+[n/2^{k-1}][n/2]+n[n/22]+……+[n/2k−1]即可。
其余质因数也同理,所以我们先要算出所有比nn小的质数
”from
3https://www.luogu.org/problemnew/show/P1403
【约数研究】这个题其实找到它的公式就好。f 【i 】=n/ i
, 因为可以把1~n的因子个数看作含2的因子的数的个数, 加上含3的因子的数的的个数。。。。。。而含二的因子的数 的个数为 n/ 2个,三个为 n/ 3个,bal al al a。