![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数论基础
crazy__C
这个作者很懒,什么都没留下…
展开
-
light oj --Digits of Factorial (一个数的位数问题以及log的公式应用)
这是一道数学题。 假设N! 等于 NUM 对于 N!= NUM 做恒等变形 (ans向下取整) 最终的结果等于ans+1 题解:我们需要知道log10(n)=a+b(a是整数,b是小于1的小数)。则a是n在十进制下的长度-1。为什么?根据性质就可以推出来,10^(a+b)=10^a*10^b,10^b必定小于10原创 2015-04-03 00:12:05 · 507 阅读 · 0 评论 -
Light oj Trailing Zeroes (I) (算术基本定理)
对于初识数论的我来说这是很好的一道题,因为通过它我扩展了不少东西:算术基本定理,线性筛素数,欧拉函数,Miller Rabin质数分解和Pollard Rho大整数分解(见模板,较为少用) 主要是对算术基本定理(质因数分解定理)的应用(百度之),求一个数因数的个数。 首先用线性筛素数法筛出所有的小于等于 sqrt(n) 的素数,然后枚举素数即可,有一点需要注意: 一个数 n 的质原创 2015-04-02 17:51:31 · 518 阅读 · 0 评论 -
light oj 1067 Combinations (组合数的lucas定理)
/* 用到了lucas定理:A、B是非负整数,p是质数。AB写成p进制:A=a[n]a[n-1]...a[0],B=b[n]b[n-1]...b[0]。 则组合数C(A,B)与C(a[n],b[n])*C(a[n-1],b[n-1])*...*C(a[0],b[0]) modp同 即:Lucas(n,m,p)=c(n%p,m%p)*Lucas(n/p,m/p,p) 对于单独的原创 2015-04-03 22:52:26 · 559 阅读 · 0 评论 -
light oj 1090 Trailing Zeroes (II)
/* 1)改题:刚开始看错题目了,把题目看成求这个数的位数,然后就错了,不过如果把题目改成求C(n,r)*p^q的位数,也是 一个不错的小题目。那样的话就用到了: 1)用log(base)n+1 求n在base进制下的位数. 2)log换底公式和其它一些简单公式。代码如下: #include #include #include #include #include原创 2015-04-05 00:21:20 · 597 阅读 · 0 评论 -
lucas定理
/* Lucas 定理:A、B是非负整数,p是质数。AB写成p进制:A=a[n]a[n-1]...a[0],B=b[n]b[n-1]...b[0]。 则组合数C(A,B)与C(a[n],b[n])*C(a[n-1],b[n-1])*...*C(a[0],b[0]) modp同 即:Lucas(n,m,p)=c(n%p,m%p)*Lucas(n/p,m/p,p) 对于单独的C(n原创 2015-04-06 09:54:01 · 598 阅读 · 0 评论 -
poj 2689 Prime Distance(筛一个区间内的素数(或合数))
: 【题意说明】 给你指定的范围[L, U],在这个范围内找出相邻最近和最远的两组质数,若最近或最远值相同,输出较小的那组。其中:1≤L,另U-L≤1000000。 【问题分析】 此题与质数有关,显然若是能求出[L, U]之间的质数,然后从前往后扫描一遍即可出需要的结果,但问题是L与U的范围太大,是不可能在规定的时间内实现的。 但这里给我们提供了另一个条件:U-L≤10000原创 2015-04-07 14:27:28 · 693 阅读 · 0 评论 -
poj 1845 Sumdiv (算术基本定理求一个数因子和)
求一个数的所有因子和可以用算术基本定理,下面是它的两个重要应用: (1)一个大于1的正整数N,如果它的标准分解式为: N=(P1^a1)*(P2^a2)......(Pn^an) 那么它的正因数个数为(1+a1)(1+a2).....(1+an)。 (2) 它的全体正因数之和为d(N)=(1+p1+...p1^an)(1+p2+...p原创 2015-04-06 19:50:56 · 760 阅读 · 0 评论 -
Codeforces Round #FF (Div. 2) E. DZY Loves Fibonacci Numbers(斐波那契的定理+线段树)
/* 充分利用了菲波那切数列的两条定理: ①定义F[1] = a, F[2] = b, F[n] = F[n - 1] + F[n - 2](n≥3)。 有F[n] = b * fib[n - 1] + a * fib[n - 2](n≥3),其中fib[i]为斐波那契数列的第 i 项。 ②定义F[1] = a, F[2] = b, F[n] = F[n -原创 2015-04-08 16:40:14 · 706 阅读 · 0 评论