快速幂
typedef long long ll;
//求base^times%mod
ll qpow(ll base , ll times, ll mod) {
ll temp = base % mod;
ll res = 1;
while (times) {
if (times % 2)res = res * (temp % mod) % mod;
temp = temp * temp % mod;
times /= 2;
}
return res % mod;
}
//x除以y后取模,相当于x乘以y的数论逆元后取模.由费马小定理,若mod是质数,y的数论逆元为y^(mod-2)
线性素数筛
const int N=1e4+5;//求出的素数在1~N之内,可修改
bool notprime[N];
int cnt,prime[N];
int a[50];
inline void init(){
notprime[1]=1;
for(int i=2;i<N;i++){
if(!notprime[i]){
prime[cnt++]=i;
}
for(int j=0;j<cnt&&i*prime[j]<N;j++){
notprime[i*prime[j]]=1;
if(i%prime[j]==0){
break;
}
}
}
}
区间筛
typedef long long ll;
const int N=1e5+5;
bool v[N];
bool notp[N];
ll L,R;
vector<int> p;
void sieve(){
std::fill(notp,notp+N,0);
p.clear();
notp[0]=notp[1]=1;
for(int i=2;i<N;i++){
if(!notp[i])p.push_back(i);
for(int j=0;j<p.size()&&p[j]*i<N;j++){
notp[p[j]*i]=1;
if(i % p[j] == 0)break;
}
}
}
void interval_sieve(){//筛出L-R之间的素数
std::fill(v,v+N,1);
if(L==1)v[0]=0;
for(ll i=0;i<p.size();i++)
for(ll j=(L-1)/p[i]+1;j<=R/p[i];j++)
if(j>1)v[p[i]*j-L]=0;
}
蔡勒公式
用于计算星期(1582/10/15 以后的日期)
int y,m,d,w;
while(cin>>y>>m>>d){
if(m==1||m==2)
{
m+=12;y--;
}
int w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
++w;
cout<<w<<endl;
}