摘要: 题意:求前n项的欧拉函数之和题解:预处理出所有欧拉函数 赤裸裸的模版题- - 没什么好说的代码: 1 #include 2 typedef long long ll; 3 const ll N=1000001; 4 ll n,phi[N],pri[N],bo[N]; 5 void makepri(){ 6 for (ll i=2;i<=N;i++){ 7 if (!bo[i]){ 8 pri[++pri[0]]=i; 9 phi[i]=i-1;10 }11 for (ll j=1;j<=p... 阅读全文
posted @ 2013-10-18 23:37 g_word 阅读(228) 评论(0) 推荐(0)
摘要: 题意:给出n个模方程x=a(mod r) 求x的最小解题解:这就是个线性模方程组的模版题- - 但是有一些要注意的地方extgcd算出来的解x可能负数 要让x=(x%mo+mo)%mo而且mo不是等于lcm(r1,r2) 而是r2/gcd(r1,r2)代码: 1 #include 2 typedef long long ll; 3 ll n,a,r; 4 ll extgcd(ll &x,ll &y,ll a,ll b){ 5 if (!b){ 6 x=1,y=0; 7 return a; 8 }else{ 9 ll res=ex... 阅读全文
posted @ 2013-10-18 23:35 g_word 阅读(180) 评论(0) 推荐(0)
摘要: 经过两天的努力 终于把AC大神的课件都看完了 感动啊啊啊TAT 顿时感觉智力上升了一个层次 之后看到数论的题目终于可以不用放弃治疗了~~~ 我会说我刚刚用了十分钟就把欧拉函数看完了吗~~~(其实之前就会-。-)欧拉函数也就是phi(n) 表示小于等于n的且与n互质的数的个数欧拉函数的公式是 phi(n)=n*(1-1/p1)*(1-1/p2)*...*(1-1/pn)要证明这个公式 我们需要先证明一些简单的性质1.若p为素数 phi(p)=p-1小于某个素数的数都和这个素数互质- - 显然2.phi(p^k)=(p-1)*p^(k-1)小于等于p^k的数中不与p互质的数肯定都是p的倍数这些数有 阅读全文
posted @ 2013-10-18 00:10 g_word 阅读(473) 评论(6) 推荐(1)
摘要: 求幂大法是可以对指数取模 而结果不变的快速求幂的方法:A^b=A^(b mod phi(B)+phi(B)) (mod B) (条件:b>=phi(B))证明:我们知道A^i mod m 会存在循环节 在循环节前可能存在一段不循环的数假设前r 为不循环的数s为循环节的长度也就是A^(r+i)=A^(r+i+s) (i>=0)要证明上面求幂大法 就是要证明 A^b mod B 的r>=phi(B) 且s|phi(B)也就是A^b mod B 当bB|p^(r+s)-p^r->B'*(p^r0)|p^r*(p^s-1)因为(p^r0,p^s-1) 所以r至少要取r0 阅读全文
posted @ 2013-10-17 13:52 g_word 阅读(435) 评论(0) 推荐(0)
摘要: ——非Au不艹 阅读全文
posted @ 2013-10-17 00:07 g_word 阅读(773) 评论(3) 推荐(3)
摘要: 被数论怒虐了一天 心力憔悴啊 感觉脑细胞已经快消耗殆尽了>_< 但是今天还是会了很多之前觉得特别神的东西比如BSGS之前听了两遍 好像都因为听得睡着了没听懂-。- 今天终于硬着头皮学会了~ 做个总结吧 免得又忘记- -BSGS:BSGS就是求 A^x=B(mod C) 0<=x<C的解(C为素数)做... 阅读全文
posted @ 2013-10-16 23:38 g_word 阅读(394) 评论(0) 推荐(0)
摘要: 由于被AK大神误导 - - 导致之前写了一个完全错误的总结 特此修改之求方程组 x=a[i](mod r[i]) 的解x即为求解方程 x=a[i]+r[i]*y联想普通方程组的解法 一直将两个方程合并成一个 最后只剩一个方程 求解即可设待合并的两个方程为 x=a1+r1*y、x=a2+r2*z合并之a1+r1*y=a2+r2*z->r1*y+r2*z=a2-a1拓展欧几里得求出(y,z)则x最小为a1+r1*y这时两方程合并为 x=a1+r1*y(mod lcm(r1,r2))就这样两两合并 如果某次(y,z)无解 则方程组无解代码: 1 scanf("%d%d",& 阅读全文
posted @ 2013-10-16 18:39 g_word 阅读(224) 评论(0) 推荐(0)
摘要: 求方程ax=c(mod b)的解可将其转换为 ax+by=c有解条件:(a,b)|c设k*(a,b)=c用拓展欧几里得求出方程ax+by=(a,b)的解(x,y)x'=k*x,y'=k*y 就是方程的一个解所以x'+i*(b/(a,b)) (i=0,1,2,..,(a,b)-1)是原方程的解证明:设sx[i]=x'+i*(b/(a,b)),sy[i]=y'-i*(a/(a,b))则需证明a*sx[i]+b*sy[i]=ca*sx[i]+b*sy[i]=a*(x'+i*(b/(a,b)))+b*(y'-i*(a/(a,b)))=ax' 阅读全文
posted @ 2013-10-16 15:48 g_word 阅读(260) 评论(0) 推荐(0)
摘要: 今天开始看orz数论了 数论一直是我最弱的一项 (一学数论就想睡觉啊啊TAT .zZ)从初三到现在每年都有学 每年都忘 于是乎做一个总结 希望能掌握神奇的数论去年noip就考了拓展欧几里得的模板题 因为不会 送了100分- -拓展欧几里得说简单了其实就是 给出方程ax+by=gcd(a,b) 求解(x,y)有学过快速求gcd的都知道 gcd(a,b)=gcd(b,a%b) 我们可以用这个性质求解假设已经知道bx+(a%b)y=gcd(b,a%b)的解(x,y)bx+(a%b)y=gcd(b,a%b)->bx+(a%b)y=gcd(a,b)->bx+(a-a/b*b)y=gcd(a, 阅读全文
posted @ 2013-10-16 13:40 g_word 阅读(195) 评论(0) 推荐(1)
摘要: 题意:有n个大臣和一个国王左右手都写了数字 让大臣们站在国王的后面 每个大臣能获得前面所有人左手上数字乘积除以该大臣右手上的数字的金钱 问如何安排大臣顺序 使得获得金钱最多的大臣获得的金钱最少题解:看到最大值的最小值 最先想到的肯定是二分答案判断答案是否可行我有一个思路(未能验证正确性) 从后往前确定某个位置上要放哪个大臣求出所有大臣左手乘积*国王左手上的数 再将大臣按左手从大到小排序 找到第一个能放在该位置的大臣(获得金钱x[i+1]*y[i+1] 那么将他们交换答案不会更差设i前所有人左手乘积为a 则交换前两大臣获得的钱分别为a/y[i]、a*x[i]/y[i+1]而交换后钱分别为a/y[ 阅读全文
posted @ 2013-10-16 00:13 g_word 阅读(561) 评论(0) 推荐(0)