//手动扩栈 #pragma comment(linker, "/STACK:102400000,102400000")
1 //线性素数筛 2 3 #define N 10005 4 int tag[N+5],p[N+5]; 5 bool pri[N+1]; 6 void get_prime() 7 { 8 memset(tag,0,sizeof(tag)); 9 int cnt=0; 10 for(int i=2;i<N;i++) 11 { 12 if(tag[i]==0) {p[cnt++]=i;pri[i]=1;} 13 for(int j=0;j<cnt&&p[j]*i<N;j++) 14 { 15 tag[i*p[j]]=1; 16 if(i%p[j]==0) break; 17 } 18 } 19 }
1 //快速幂 2 3 long long powx(int a,int b,int c) 4 { 5 long long re=1; 6 while (b) 7 { 8 if (b&1) re=(re*a)%c; 9 a=(a*a)%c; 10 b>>=1; 11 } 12 return re; 13 }
1 //欧拉函数 2 3 int Euler(int n) 4 { 5 int ans=n,i; 6 for(i=2;i*i<=n;i++) 7 { 8 if(n%i==0) 9 { 10 ans-=ans/i; 11 while(n%i==0) 12 { 13 n/=i; 14 } 15 } 16 } 17 if(n>1) ans-=ans/n; 18 return ans; 19 } 20 21 //打表 22 23 int phi[MAX]; 24 void init() 25 { 26 int i,j; 27 memset(phi,0,sizeof(phi)); 28 phi[1]=1; 29 for(i=2;i<MAX;i++) 30 { 31 if(phi[i]==0) 32 { 33 for(j=i;j<MAX;j+=i) 34 { 35 if(phi[j]==0) phi[j]=j; 36 phi[j]-=phi[j]/i; 37 } 38 } 39 } 40 return ; 41 }
1 //组合数 2 3 __int64 C(__int64 n,__int64 m) 4 { 5 __int64 ans=1,i; 6 for(i=1;i<=m;i++) 7 ans=ans*(n-i+1)/i; 8 return ans; 9 }
输入挂
1 //整数 2 inline bool scan_d(int &num) 3 { 4 char in;bool IsN=false; 5 in=getchar(); 6 if(in==EOF) return false; 7 while(in!='-'&&(in<'0'||in>'9')) in=getchar(); 8 if(in=='-'){ IsN=true;num=0;} 9 else num=in-'0'; 10 while(in=getchar(),in>='0'&&in<='9'){ 11 num*=10,num+=in-'0'; 12 } 13 if(IsN) num=-num; 14 return true; 15 }
1 //实数 2 inline bool scan_lf(double &num) 3 { 4 char in;double Dec=0.1; 5 bool IsN=false,IsD=false; 6 in=getchar(); 7 if(in==EOF) return false; 8 while(in!='-'&&in!='.'&&(in<'0'||in>'9')) 9 in=getchar(); 10 if(in=='-'){IsN=true;num=0;} 11 else if(in=='.'){IsD=true;num=0;} 12 else num=in-'0'; 13 if(!IsD){ 14 while(in=getchar(),in>='0'&&in<='9'){ 15 num*=10;num+=in-'0';} 16 } 17 if(in!='.'){ 18 if(IsN) num=-num; 19 return true; 20 }else{ 21 while(in=getchar(),in>='0'&&in<='9'){ 22 num+=Dec*(in-'0');Dec*=0.1; 23 } 24 } 25 if(IsN) num=-num; 26 return true; 27 }