各种数论模板

1.筛法求素数

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 using namespace std;
 6 const int MAXN=10001;
 7 int vis[MAXN];
 8 int main()
 9 {
10     int n;
11     scanf("%d",&n);
12     for(int i=2;i<=sqrt(n);i++)
13     {
14         if(vis[i]==0)
15         {
16             for(int j=i*i;j<=n;j=j+i)
17             {
18                 vis[j]=1;
19             }
20         }
21     }
22     for(int i=2;i<=n;i++)
23     {
24         if(vis[i]==0)
25         printf("%d ",i);
26     }
27     return 0;
28 }

线性筛法求素数

2.欧几里得求最大公约数及最小公倍数

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 using namespace std;
 6 int gcd(int x,int y)
 7 {
 8     if(y==0)
 9     return x;
10     else
11     return gcd(y,x%y);
12 }
13 int main()
14 {
15     int x,y;
16     scanf("%d%d",&x,&y);
17     int gys=gcd(x,y);
18     printf("%d\n%d",gys,x*y/gys);
19
20     return 0;
21 }

欧几里得求最大公约数及最小公倍数

3.扩展欧几里得求同余方程

http://codevs.cn/problem/1200/

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 using namespace std;
 5 int x,y;
 6 int exgcd(int a,int b,int &x,int &y)
 7 {
 8     if(b==0)
 9     {
10         x=1;
11         y=0;
12         return a;
13     }
14     int r=exgcd(b,a%b,x,y);
15     int tmp=x;
16     x=y;
17     y=tmp-(a/b)*y;
18     return r;
19 }
20 int main()
21 {
22     int a,b;
23     scanf("%d%d",&a,&b);
24     exgcd(a,b,x,y);
25     while(x<0)
26     x=x+b;
27     printf("%d",x);
28     return 0;
29 }

扩展欧几里得求同余方程

时间: 2024-10-11 22:41:59

各种数论模板的相关文章

【史前巨坑】数论模板整合

跪了一下午数论 整理了一下数论模板 这是个史前巨坑,有空慢慢填 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #define MAXN 1000000 using namespace std; bool not_prime[MAXN]; int prime_number[MAXN]; int nu; int fac

PWJ的数论模板整理

一些还没学到,但已经听说的就先copy其他博客的 数论 欧拉降幂 求a1^a2^a3^a4^a5^a6 mod m #include<cstdio> #include<cstring> const int N=1e4+11; typedef long long ll; char s[10]; int n,lens,phi[N]; ll md,a[15]; void init(){ for(int i=1;i<N;i++) phi[i]=i; for(int i=2;i<

算法笔记--数论模板小集(待增)

仓鼠大神博客:http://www.cnblogs.com/linyujun/p/5194184.html http://www.cnblogs.com/linyujun/p/5194170.html ①gcd 一行版: unsigned int gcd(unsigned int a,unsigned int b) { return b>0?gcd(b,a%b):a; } 位运算版: ll gcd(ll a,ll b) { while(b^=a^=b^=a%=b); return a; } ②快

数论模板

//求gcd(a, b) LL gcd(LL a, LL b) { return b ? gcd(b, a%b) : a; } //求整数x和y,使得ax+by=d, 且|x|+|y|最小.其中d=gcd(a,b) void gcd(LL a, LL b, LL& d, LL& x, LL& y) { if(!b) { d = a; x = 1; y = 0; } else { gcd(b, a%b, d, y, x); y -= x * (a/b); } } //计算模n下a的逆

数论模板总结 -- 未完待续

// 代码待添加 GCD求最大公约数 扩展GCD求ax + by = c 的解以及判断是否有解 -- 当c为gcd(a,b)的倍数 Eratosthenes's sieve 埃氏筛选法求素数 筛选法求1~n欧拉函数值 -- 与埃氏筛选法一样,如果一个数j是i的倍数,那么其欧拉函数值就phi[j] = phi[j] / i * (i - 1) 并标记当前值,同时这也保证了i一定是素数 .当然初始值phi[i] = i

数论模板整理

1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<cstdlib> 5 #include<cmath> 6 #include<map> 7 #include<iostream> 8 using namespace std; 9 typedef long long ll; 10 #define pi acos(-1.0) 11 co

ACM数论模板

w2w原创 1.欧几里得定理 int gcd(int a, int b){     return b==0?a:gcd(b, a%b); } 2.扩展欧几里得(求ax+by = gcd(a,b)的特解) void e_gcd(LL a, LL b, LL &d, LL &x, LL &y){ if(b==0){ x = 1; y = 0; d = a; } else{ e_gcd(b, a%b, d, y, x); y-= x*(a/b); } } 3.中国剩余定理 同余方程组 x

数论模板目录

gcd:http://www.cnblogs.com/geloutingyu/p/6209026.html exgcd:http://www.cnblogs.com/geloutingyu/p/5934974.html

数论模板合集(更新中)

注:均为开\(long\ long\)且未取模 #include<cstdio> #include<algorithm> #include<ctype.h> #include<vector> #include<queue> #include<cstring> #define lowbit(x) (x&-x) #define ll long long #define ld double #include<map> #