C语言模板(实时更新)
2020-01-30
最大公约数:
1 int gcd(int a,int b) //最大公约数 2 { 3 return (b>0)?gcd(b,a%b):a; 4 }
最小公倍数:
1 int gcd(int a,int b) //最大公约数 2 { 3 return (b>0)?gcd(b,a%b):a; 4 } 5 int lcm(int a,int b) 6 { 7 return a*b/gcd(a,b); //最小公倍数 8 }
sort快排降序
1 bool cmp(int a,int b) // sort降序 2 { 3 return a>b; 4 }
快速幂
1 ll pow1(ll a,ll b,ll mod) //a为底数,b为指数,mod为模 2 { 3 ll ans = 1%c; 4 a = a % mod; 5 while(b) 6 { 7 if(b & 1) ans = ans * a % mod; 8 b = b>>1; 9 a = (a * a) % mod; 10 }11 return ans; 12 }
这里一定要在结尾再模一下,防止0^0 mod 1=1.
防坑题:https://ac.nowcoder.com/acm/contest/996/A
2020/08/02
普通质数筛
bool prime(int a) { for(int i=2;i<=sqrt(a);i++) { if(a%i==0) return 0; } return 1; }
埃氏筛
bool isprime(int n) { if (n<=1) return false; for (int i=2; i*i<=n; i++) if (n%i==0) return false; return true; }
欧拉筛(线性筛)
int prime[maxn];//存放每个质数,其中prime[0]表示2~maxn范围内的质数的个数 int visit[maxn];//对每个数进行判断,0表示质数 void Prime(){ memset(visit,0,sizeof visit); memset(prime, 0,sizeof prime); for (int i = 2;i <= maxn; i++) { cout<<" i = "<<i<<endl; if (!visit[i]) { prime[++prime[0]] = i; //纪录素数, 这个prime[0] 相当于 cnt,用来计数 } for (int j = 1; j <=prime[0] && i*prime[j] <= maxn; j++) { visit[i*prime[j]] = 1; if (i % prime[j] == 0) { break; } } } }
作者:Drophair
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。