PAT A 备考实用小模块集合

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);
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值