1、素数
素数判断函数和获取素数表的写法。(二者是独立的,选择使用)
bool is_prime(int x){ //素数判断
if(x==0||x=1) return false;
int k=(int)sqrt(x*1.0);
for(int i=2;i<=K;i++){
if(x%i==0) return false;
}
return true;
}
//素数筛(埃氏筛法)
int P[MaxN]={0};//0代表为素数,1代表为负数
vector<int> Primeorder;//记录素数序列
void prime(int Max){
for(int i=2;i<Max;i++){
if(P[i]==0) Primeorder.push_back(i);
for(int j=i+i;j<Max;j+=i){
P[j]=1;
}
}
}
2、最大公约数GCD
int Gcd(int a,int b){
if(b==0){
return a;
}else{
return Gcd(b,a%b);
}
}
3、某个数的各数位之和
int Sum_digit(int x){
if(x==0){
return x;
}else{
return x%10+Sum_digit(x/10);
}
}
4、散列Hash表中正向平方探查法
新的数为x,hash表长为Msize。
int x;
vector<int> hash(Msize,-1);
for(int j=0;j<=Msize;j++){
int t=(x+j*j)%Msize;
if(hash[t]==-1){
hash[t]=x;
break;
}
}
5、理解ASCLL码
对于一个字符char,其有对应的ASCLL码值
其中'A'+32='a'(用于大小写转换,大写字母+32为小写字母)
判断某个字符是不是a~z或者A~Z,可以直接用相减的值判断
tip:判断string x中某个字符也可以很方便,x[i]即为char型
char c;
if(c-'a'>=0&&c-'z'<=0){
//c在'a'~'z'之间
c-=32;//转换为大写字母
}
if(c-'A'>=0&&c-'Z'<=0){
//c在'A'~'Z'之间
c+=32;//转换为小写字母
}
6、STL迭代器中auto的使用(非常方便)
特别注意: 区别要不要加星号* !!!
vector<int> v;
set<int> s;
for(auto it=v.begin();it!=v.end();it++){ //方法1,v与s相同,要*
printf("%d",*it);
}
for(auto it:v){ //方法2,v与s相同,不需要*
printf("%d",it);
}
map<int,int> m;
for(auto it=m.begin();it!=m.end();it++){
printf("%d %d",it->first,it->second);
}