数论初步
文章平均质量分 58
帐下幕僚
我只是一个普普通通的大学学生,我来到这里是想获得我在学校所不能得到的知识。
展开
-
hdu1576(A/B)扩展欧几里得
由于A必能被B整除,不妨设整数k使得A=B*k, 则A=n(mod 9973)->B*k=n(mod 9973)(i式)。 又B与9973互素,即gcd(B,9973)=1 又即存在整数x,y使得x*B+y*9973=1(ii式)。(x,y可由扩展欧几里得算法求得) 由数论的知识,(i式左右两边同乘x式子依旧成立),即 x*B*k=n*x(mod 9973),结合(ii式)得 (1-y*原创 2016-07-01 20:22:43 · 234 阅读 · 0 评论 -
hdu5114 Collision(一元同余方程)
推了一晚上,还是没发现问题会转化成同余方程。 为了避免小数,所有点坐标*2 对于这种题,感觉应先考虑一维的情况, x1,x2,[0,x0],方向1 那么if x1==x2,就直接相撞 else 设移动tx步 不妨对x2做对称,则x2变为2k*x0-x2,此时方向为-1 则 x1+1* tx=2k* x0-x2+(-1)* tx 即原创 2016-09-30 20:31:31 · 430 阅读 · 4 评论 -
SPOJ PGCD(mobius反演+分块+线性筛)
这道题T了,看了大神代码才知道我把这道题想得太简单了,思路基本上是下面这个博客的。 神牛博客 首先第一步,求的是1< =i< =m,1<= j< =n,gcd(i,j)为素数的个数 枚举小于m且小于n的素数p。 然后转化为求1< =i< =m,1<= j< =n,gcd(i,j)为p的个数, (这个就是hdu1695所求的, 解法详见http://blog.csdn.net/abc130原创 2016-08-13 22:12:58 · 337 阅读 · 0 评论 -
HYSZB PROBLEM B(mobius反演+分块+容斥原理)
这道题和hdu1965思路基本类似, http://blog.csdn.net/abc13068938939/article/details/52198163 mobius反演得出的结果是(过程在上面的博文中有介绍) 1< =i< =m和1< =j< =n中gcd(i,j)=k的个数 令m~=m/k, n~=n/k。且不妨设m < = n。f(1)=Sigma(d=1 : m) u(d)*原创 2016-08-13 19:28:15 · 334 阅读 · 0 评论 -
hdu1695gcd(Mobius反演)
莫比乌斯反演的两种形式,书上一般只介绍第一种。 这道题用的是第二种。 f(k)是1<=x<=b,1<=y<=d中gcd(x,y)==k的个数 F(k)是1<=x<=b,1<=y<=d中gcd(x,y)是k的倍数的个数 F(k)=(b/k)*(d/k)。 并且这道题转化为 f(k) =f(1)是1<=x<=b/k,1<=y<=d/k中gcd(x,y)==1的个数 也就是求f(1)=s原创 2016-08-13 10:54:51 · 630 阅读 · 0 评论 -
poj2992(Divisors)(阶乘因数分解)
阶乘因数分解原创 2016-07-17 09:52:58 · 356 阅读 · 0 评论 -
hdu4349xiaoming's hope(Lucas定理和位运算)
这道题时间复杂度应为O(log n)。代码其短 刚开始用的是O(n),即一个数一个数判断。lucas定理在这道题p=2, 但事实上lucas(n,i,2)==true等价于(n&i)==i,然而这还是超时。 观察发现,由于求的是i=0~n中满足C(n,i)为奇数的个数。 不妨把n写成二进制,那么(n&i)==i就相当于n的二进制中的1可选可不选,例如7=111(2进制),那么满足的i可以是0原创 2016-07-17 10:47:04 · 421 阅读 · 0 评论 -
hdu4746 Mophues(莫比乌斯反演)-好题
hdu 1695 http://blog.csdn.net/abc13068938939/article/details/52198163 BZOJ 2301 http://blog.csdn.net/abc13068938939/article/details/52201090 BZOJ 2818 http://blog.csdn.net/abc13068938939/article/d原创 2016-08-17 16:06:39 · 370 阅读 · 0 评论 -
poj2689(Prime Distance两次筛)
两次筛,这里第一次用的是欧拉筛,第二次用的是埃氏筛(似乎第二次只能用埃氏筛)。 for(int i=0;i<=R-L;i++) if(!isnPres[i]) res[l++]=i+L; /* for(int i=L;i<=R;i++)//如果这样写的话就runtime error if(!is原创 2016-07-04 19:21:37 · 409 阅读 · 0 评论 -
hdu2824(the Euler Function)
用欧拉筛求出欧拉函数。http://blog.csdn.net/nk_test/article/details/46242311 欧拉函数:在数论中,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目。先给出一个结论:设P是素数,若p是x的约数,则E(x*p)=E(x)*p.若p不是x的约数,则E(x*p)=E(x)E(p)=E(x)(p-1).证明如下:E(x)表示比x小的且与x互质的正原创 2016-07-02 17:41:34 · 365 阅读 · 0 评论 -
poj3518(Prime Grap 欧拉筛+二分)
用欧拉筛打表,二分搜索,过。。。。#include <iostream>#include <algorithm>#include <string.h>#include <stdio.h>using namespace std;#define ms(X) memset(X,0,sizeof(X))bool isnP[1400000];int mprime[110000],t=0;voi原创 2016-07-02 16:47:30 · 329 阅读 · 0 评论 -
poj2142(THE BALANCE)(扩展欧几里得入门题)
总共要考虑一下三种情况 1. a *x=b*y+d; 2. a*x=b*y-d; 3. a*x+b*y=d;(其中x和y均为非负整数,可由扩展欧几里得算法求得)#include <iostream>#include <stdio.h>#include <algorithm>using namespace std;#define INF 0xffffffftypedef l原创 2016-07-02 15:04:15 · 405 阅读 · 0 评论 -
hdu1211(RSA)(扩展欧几里得+快速幂+快速乘)
其实题意可以这样理解,已知e,n,F(n),且gcd(e,F(n))=1 求d使得 d*e = 1 mod F(n)。 由扩展欧几里得算法可求出d。 然后给一个整数an,输出 (an)^d (mod n)的对应的字符。(显然快速幂搞定)#include <iostream>#include <stdio.h>#include <algorithm>using namespace st原创 2016-07-01 21:04:10 · 368 阅读 · 0 评论 -
51nod1195斐波那契数列的循环节
求 Fib 数模 n 的循环节: 1. 对 n 做因数分解: n=p1^e1 * p2^e2 * … * pt^et; 2. 求出每个素数 pi 对应 Fib 数模 pi 的循环节mi0 ,则 pi^ei 对应的 Fib 数模 pi^ei 的 循环节 mi=mi0 * pi^(ei-1); 3. Fib 数模 n 的循环节就等于 lcm(mi)。 关键在于如何求Fib 数模素数 pi原创 2016-12-23 10:37:21 · 2038 阅读 · 0 评论