数论
Goodbye_yesterday
湖北大学计科18级
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
扩展欧几里得算法
扩展欧几里得可以求a*x+b*y=gcd(a,b)方程关于x,y的整数解(a,b已知) gcd(a,b)=gcd(b,a%b),所以a*x+b*y=gcd(a,b)=gcd(b,a%b)=b*x+a%b*y; 根据取余运算公式a%b=a-(a/b)*b; 若运算中含有浮点数则只需把(a/b)改为int(a/b)即可 上式=b*x+(a-(a/b)*b)*y=y*a+(x-(a/b)*b)*...原创 2018-08-09 10:22:18 · 229 阅读 · 0 评论 -
洛谷P1516
由题意x+m*t-y-n*t=p*l;t代表时间,p代表圈数,这两个量是未知数。 整理得:p*l+(n-m)*t=x-y; 令a=n-m;b=l,c=x-y; 即a*x+b*y=c; 先解a*x1+b*y1=gcd(a,b); 等式两边同时乘以c/gcd(a,b); x=x1*c/gcd(a,b); t=b/gcd(a,b); x=(x%t+t)%t; #include<...原创 2018-08-09 14:00:04 · 359 阅读 · 0 评论 -
POJ 1845
1.整数的唯一分解定理 任何正整数都有且只有一种方式写出其素因子的乘积表达式。 A=(p1^k1)*(p2^k2)*(p3^k3)*.....*(pn^kn) p均为素数。 2.约数和公式 S=(1+p1+p1^2+.....+p1^k1)*(1+p2+p2^2+.....+p2^k2)*......*(1+pn+pn^2+pn^3+.....+pn^kn); 3.同余模公式 (a+b...原创 2018-08-10 19:33:22 · 393 阅读 · 0 评论 -
辗转相除法
int gcd(int a,int b) { if(b==0) return a; else return gcd(b,a%b); } 辗转相除法的基本原理就是gcd(x,y)=gcd(x,y-x); 如果想要进一步提高gcd的效率,可以通过不断去除因子2来降低常数。 1,若x,y均为偶数,则gcd(x,y)=2*gcd(x/2.y/2); 2 ,若x为偶数,y为奇数,则gcd...原创 2018-08-08 19:49:05 · 1340 阅读 · 0 评论 -
中国剩余定理
孙子算经 今有物不知其数,三三数之余二,五五数之余三,七七数之余二,问物几何? 这个题实际是求解一下同余方程 x=2(mod 3); x=3(mod 5); x=2(mod 7); 先解下面三个同余方程: x=0(mod 5); x=1(mod 3); 70 x=0(mod 7); x=0(mod 3); x=1(mod 5); 21 x=0(m...原创 2018-08-18 11:29:47 · 346 阅读 · 0 评论 -
素数的相关问题
线性素数筛法 void judge(int n) { int m=sqrt(n+0.5); for(int i=2;i<=m;i++) if(vis[i]) { for(int j=i*i;j<=n;j+=i) vis[j]=1; } } 上述代码看起来并不是线性的,但事实上它避免了重复筛查,从i*i开始筛查,因为2*i,3*i.....(i-1)*i之前已经筛...原创 2018-08-20 13:42:50 · 244 阅读 · 0 评论 -
BSGS算法及其扩展算法
该算法是用来解决A^x=B(mod C)这一类问题的。 BSGS算法只能适用于C为素数的情况。 m=sqrt(C); x=m*i+j; A^x=A^(i*m)*A^j; 每次枚举i,令D=A^(i*m); D*A^j=B(mod C); D*A^j+C*y=B; 用扩展欧几里得可以求出A^j 通过hash查出对应的j; #include<iostream> #in...原创 2018-09-01 12:19:47 · 520 阅读 · 0 评论 -
HDU 1573
其实就是个中国剩余定理的模板题,因为题目没有保证模数是素数,所以用通法 直接上代码 void getphi() { phi[1]=1; int i,j; for(int i=2;i<=n;i++) { if(!vis[i]) { phi[i]=i-1; prime[++prime[0]]=i; } for(int j=1;j<=tot;...原创 2018-09-14 10:17:49 · 220 阅读 · 0 评论 -
康托展开及康拓逆展开
康拓展开 把一个整数X展开成如下形式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[2]*1!+a[1]*0! 其中a[i]为''当前元素''在''所有未出现的元素''中排在第i个(从0开始),并且0<=a[i]<i(1<=i<=n) 为了更好的理解康托展开,举个例子 序列 3 4 6 2 1 7 5 8 ...原创 2019-03-06 22:48:12 · 291 阅读 · 0 评论
分享