数学
k_Tao
这个作者很懒,什么都没留下…
展开
-
素数筛选(判断<MAXN的数是否是素数)
/*素数筛选,判断小于MAXN的数是否是素数。 *notprime是一张表,为false表示是素数,true表示非素数*/const int MAXN=1000010;bool notprime[MAXN];//值为false表示素数,值为true表示非素数void init(){ memset(notprime,false,sizeof(notprime)); notprime[0]=原创 2016-05-25 12:23:39 · 362 阅读 · 0 评论 -
素数筛选(筛选小于等于MAXN的素数)
/**素数筛选,存在小于等于MAXN的素数*prime[0]存的是素数的个数 */const int MAXN=1000010;int prime[MAXN+1];void getPrime(){ memset(prime,0,sizeof(prime)); for(int i=2;i<=MAXN;i++) { if(!prime[i])prime[++prime[0]]=原创 2016-05-25 12:32:10 · 476 阅读 · 0 评论 -
欧拉函数
欧拉函数 定义:在数论,对正整数n,欧拉函数是小于等于n的数中与n互质的数的数目。 ϕ (n) = 1..n中与n互质的数的个数 如何求ϕ (n)? 素因子展开+容斥原理 令n = p1r1p2r2...pkrkϕ(n)=n*(1-1/p1)*(1-1/p2)*...*(1-1/pk)(为什么?)提示:欧拉函数是积性函数——若m,n互原创 2016-05-21 10:51:55 · 264 阅读 · 0 评论 -
埃氏筛法(筛选素数)
首先,将2到n范围内的所有整数记下来,其中最小的数字2为素数。在表中将2的倍数划去,表中剩下最小的数为3,不能被更小的整除,然后将3的倍数划去。如果表中剩下的最小数为m,m是素数,然后将表中所有m的倍数都划去。像这样反复的操作,就能依次枚举n以内的素数了。复杂度:nloglogn代码实现:#include#includeusing namespace原创 2016-05-21 09:52:48 · 3918 阅读 · 0 评论 -
快速模幂
对于 a^b mod k,怎么求解? 简单!!!,用暴力求出a^b不就解决了?要是数据很大呢?显然用暴力解决不了。。。 怎么简洁美观的解决这个问题?? 提示:a*b mod c = (a mod c )*b mod c 将b表示成二进制形式 b = bnbn-1…b1b0a^b mod k = a^(bnbn-1…b1b0) mod k= a^(b0*2^0)*a^(b1*2^1)*原创 2016-05-21 10:28:05 · 291 阅读 · 0 评论