一、C++小结
A.
rp是个引用,引用的是一个指针指向的是int型
int *&rp=p;
数组的引用:
arry[10];
int (&r)[10] = arry;
引用必须在创建时,确定引用对象。
在C++中malloc必须强制类型转换。
B. 动态挖坑在堆区 new delete
int *p;
p = new int;
*p = 3;
cout <<p << endl;
delete p;
如果是开辟一块空间给数组,delete的时候有区别。
int *p;
p = new int[10];
cout <<p << endl;
delete []p;
return 0;
二、数论基础
A.算术基本定理,每个大于等于2的正数,可唯一分解为素数乘积
引理:p是素数,假设p整除ab,则p整除a或者p整除b。
定理:假设素数p整除乘积a1a2a3....ar,则p整除a1,a2,....,ar至少一个因数
约数个数定理:
对于一个大于1正整数n可以分解质因数:
例如: 675=5*5*3*3*3
B.质数部分
孪生素数定理: 除了2、3,所有素数都在6的倍数的两边。
bool judge (){
if (n==2||n==3) return true;
if (n % 6 != 1&& n % 6 != 5)
return false; //但是在6倍数两侧的不一定都是素数 这样做只是缩小了范围
for (int i = 5; i< sqrt(n);i += 6){
if (n%i==0||n%(i+2)==0){
return false ;
}
}
return true ;
}
筛选,先标记
bool arry[maxn];
memset(arry,true,sizeof(arry);
bool judge (){
for (int i = 2; i <maxn; i++){
if (arry[i]){
for (int j = i; j < maxn; j+=i){
arry[i]=false;
}
}
}
}