码迷,mamicode.com
首页 > 其他好文 > 详细

wenbao与模板

时间:2018-01-09 16:41:02      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:const   break   ==   family   class   aaa   get   欧几里得   print   

 

 

 1 #define LL long long
 2 //快速幂 a^p%Mod
 3 LL pow_mod(LL a, LL p, LL Mod){
 4     LL X = 1LL;
 5     if(a == 0) return 0;
 6     while(p){
 7         if(p&1) X = X*a%Mod;
 8         a = a*a%Mod;
 9         p >>= 1;
10     }
11     return X;
12 }
13 //扩展欧几里得
14 void gcd(LL a, LL b, LL& d, LL& x, LL& y){
15     if(!b) { d = a, x = 1, y = 0;}
16     else { gcd(b, a%b, d, y, x); y -= x*(a/b);}
17 }
18 //计算模n下a的逆
19 //第一种利用GCD
20 LL inv(LL a, LL n){
21     LL d, x, y;
22     gcd(a, n, d, x, y);
23     return d == 1 ? (x+n)%n : -1;
24 }
25 //第二种利用欧拉定理
26 //pow_mod(a, n-2, n)

 

 

 KMP

 1 const int maxn = 1e5+10;
 2 int Next[maxn];
 3 int KMP(char* aim, char* str){
 4     memset(Next, 0, sizeof(Next));
 5     int num = 0, len = strlen(aim), Len = strlen(str);
 6     for(int i = 1; i < len; i++){
 7         int j = Next[i];
 8         while(j && aim[i] != aim[j]) j = Next[j];
 9         Next[i+1] = (aim[i] == aim[j]) ? j+1 : 0;
10     }
11     int j = 0;
12     for(int i = 0; i < Len; i++){
13         while(j && aim[j] != str[i]) j = Next[j];
14         if(aim[j] == str[i]) j++;
15         if(j == len) num++;
16     }
17     return num;
18 }

 

 

欧拉筛

 

 1 const int maxn = 1e5+10;
 2 int p[maxn], phi[maxn];
 3 bool vis[maxn];
 4 int Euler(int n){
 5     int i, j, k;
 6     phi[1] = 1;
 7     for (int i = 2; i < n; ++i){
 8         if (!vis[i]){
 9             p[cnt++] = i;
10             phi[i] = i - 1;
11         }
12         for (int j = 0; j < cnt && i * p[j] < n; ++j){
13             vis[i * p[j]] = true;
14             if (i % p[j]) phi[i * p[j]] = phi[i] * phi[p[j]];
15             else {
16                 phi[i * p[j]] = phi[i] * p[j];
17                 break;
18             }
19         }
20     }
21     return cnt;
22 }

 

 

输入输出外挂

 

 1 int read(){
 2     int x=0,f=1,ch=getchar();
 3     while(ch<0||ch>9){if(ch==-)f=-1;ch=getchar();}
 4     while(ch<=9&&ch>=0){x=(x<<1)+(x<<3)+ch-0,ch=getchar();}
 5     return x*f;
 6 }
 7 void out(int x){
 8     if(x > 9) out(x/10);
 9     putchar(x%10+0);
10 }

 

 

测试时间

 1 printf("%.3lf\n", (double)clock()/CLOCKS_PER_SEC); 

 

 

 1 struct Node{
 2     ll x[16][16];
 3 };
 4 Node mul(Node xx, Node yy){
 5     Node X;
 6     for(int i = 0; i < d; ++i){
 7         for(int j = 0; j < d; ++j){
 8             X.x[i][j] = 0;
 9             for(int k = 0; k < d; ++k){
10                 X.x[i][j] = (X.x[i][j] + (xx.x[i][k]*yy.x[k][j])%m) % m;
11             }
12         }
13     }
14     return X;
15 }
16 Node q_m(Node A, ll x){
17     Node AAA;
18     for(int i = 0; i < d; ++i){
19         for(int j = 0; j < d; ++j){
20             AAA.x[i][j] = (i == j);
21             //printf("%lld ", AAA.x[i][j]);
22         }
23         //puts("");
24     }
25     while(x){
26         if(x&1) AAA = mul(AAA, A);
27         A = mul(A, A);
28         x >>= 1;
29     }
30     return AAA;
31 }

 

 

 

只有不断学习才能进步!

 

wenbao与模板

标签:const   break   ==   family   class   aaa   get   欧几里得   print   

原文地址:https://www.cnblogs.com/wenbao/p/6439067.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!