数学备忘录
//数学备忘录
//数学
//素数
//判定素数
bool Is_prime(int n)
{
if(n==1) return false;
if(n==2||n==3) return true;
if(n%6!=1&&n%6!=5) return false;
for(register int i=5;i*i<=n;i+=6)
if(n%i==0||n%(i+2)==0) return false;
return true;
}
//素数线性筛
const int MAXN=1e5+100;//MAXN<=n
int check[MAXN];//标记合数
int prime[MAXN];//存放筛出的素数 不超过N的质数约有N/ln N个
void getprime(int n)//线性筛出2~n范围内的素数
{
//memset(check,0,sizeof(check));
// for(int i=0;i<=n;i++) check[i]=0;
check[0]=check[1]=1;
int tot=0;//记录素数的个数
for(int i=2;i<=n;i++){
if(check[i]==0) prime[++tot]=i;
for(int j=1;j<=tot;j++){
if(i*prime[j]>n) break;
check[i*prime[j]]=1;
if(i%prime[j]==0) break;
}
}
}
//埃式素数筛
const int MAXN=1e5+100;
int prime[MAXN]; //存放筛出的素数 不超过N的质数约有N/ln N个
int check[MAXN]; //标记合数
void find_prime(int n)
{
//memset(check,1,sizeof(check));
//for(int i=0;i<=n;i++) check[i]=0;
//check[0]=check[1]=1;
int tot=0;
for(int i=2;i<=n;i++){
if(check[i]==0){
prime[++tot]=i;
for(int j=2*i;j<=n;j+=i) check[j]=1;
}
}
}
//质因数分解,只适合比较小的数
const int MAXN=1e5+100;
int p[MAXN];
int c[MAXN];
void divide(int n)
{
int m=0;
for(int i=2;i<=sqrt(n);i++){
if(n%i==0){
p[++m]=i,c[m]=0;
while(n%i==0) n/=i,c[m]++;
}
}
if(n>1) p[++m]=n,c[m]=1;
for(int i=1;i<=m;i++) cout<<p[i]<<'^'<<c[i]<<endl;
}
//区间素数筛法