1、整除 a|b
2、约数=因数,质因数,即能整除给定正整数的质数
3、快速幂,2^22 = ((22)2’’’)^2
4、埃式筛法。思想:要得到自然数n以内的全部素数,必须把不大于根号n的所有素数的倍数剔除,剩下的就是素数
放3```c
#include<stdio.h>
#include<math.h>
#include <memory.h>
#define N 20
int main(){
int pn[N+1];
int i,j;
int sqr;
//0为素数,1为合数,其中2的倍数都为合数,但为了优化,设置为0
memset(pn,0,sizeof(pn));//将某一块内存中的内容全部设置为指定的值
sqr=sqrt(N);
for(i=3;i<=sqr;i+=2){//i加2,因为偶数都是2的倍数
if(!pn[i]){
for(j=i*2;j<=N;j+=i)
pn[j]=1;
}
}
printf("%d\n",2);
for(i=3;i<=N;i+=2){
if(!pn[i])
printf("%d\n",i);
}
return 0;
}
5、算一个数的因数的个数和各各值
把一个数分解为质数相乘的形式
例:
10=2×5=21×51
10的因子:1(2^0×5^0),2(2^1×5^0),5(2^0×5^1),10(2^1×5^1),
因子的个数=4=(1+1)×(1+1)
```c
#include <bits/stdc++.h>
using namespace std;
void resolved()
{
int i,n,temp;
scanf("%d",&n);
printf("%d=",n);
temp=n;
if(n<2) return ; //小于2的数不合法,若n为质数则输出它本身
for(i=2;i*i<=temp;i++) //根号n复杂度
while(temp%i==0) //借鉴埃式筛法思想,这样不会出现合数
{
temp=temp/i;
printf("%d",i);
if(temp!=1) printf("*");
}
if(temp!=1) printf("%d",temp); //当n为质数
return ;
}
int main()
{
resolved();
return 0;
}
6、欧拉筛