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,697,98,99,100

我们不妨想一想,这当中有哪些会贡献一个2? 列出来的话,就是这样:

2 , 4 , 6 …… 98 , 1002,4,698,100

可以看到,正好占了[ n/2 ][n/2]个。

那这些数中,又有几个数会再贡献一个2?

4, 8, 12 …… 96, 1004,8,1296,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/2k1]即可。

其余质因数也同理,所以我们先要算出所有比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。

posted @ 2019-04-05 20:07  lalalalala1279  阅读(123)  评论(0编辑  收藏  举报