一)约数
#include <bits/stdc++.h>
using namespace std;
vector <int> vc;
int main(){
int x;
cin>>x;
for(int i=2;i*i<=x;i++){
if(x%i==0){
if((x/i)==i)
vc.push_back(i);
else{
vc.push_back(x/i);
}
}
}
for(auto g:vc)
cout<<g<<" ";
return 0;
}
二)质数-只能被1和X本身整除
1、输出1到n的质数
#include <bits/stdc++.h>
using namespace std;
vector <int> vc;
int bk[1000];
int main(){
int n;
cin>>n;
for(int i=2;i<=n;i++){
if(bk[i])
continue;
vc.push_back(i);
for(int j=i+i;j<=n;j+=i)
bk[j]=1;
}
for(auto g:vc)
cout<<g<<" ";
return 0;
}
2、求1到n所有数的约数
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
vector<int> p;
vector<int> d[maxn];
int bk[maxn];
int main(){
int n; cin >> n;
// 方法一:O(nloglogn)
for (int i = 2 ; i <= n ; i++){
if (bk[i]) continue;
p.push_back(i);
for (int j = i + i ; j <= n ; j += i) bk[j] = 1;
}
memset (bk , 0 , sizeof bk);
// 用方法一来求1~n中每个数的质因子
for (int i = 2 ; i <= n ; i++){
if (bk[i]) continue;
p.push_back(i);
d[i].push_back(i);
for (int j = i + i ; j <= n ; j += i) {
bk[j] = 1;
d[j].push_back(i);
}
}
memset (bk , 0 , sizeof bk);
// 方法二:O(nlogn)
for (int i = 2 ; i <= n ; i++){
if (!bk[i]) p.push_back(i);
for (int j = i + i ; j <= n ; j += i) bk[j] = 1;
}
memset(bk , 0 , sizeof bk);
for (int i = 1 ; i <= n ; i++)
d[i].push_back(1);
// 方法二用来求1~n中每个数的约数.
for (int i = 2 ; i <= n ; i++){
if (!bk[i]) p.push_back(i);
d[i].push_back(i);
for (int j = i + i ; j <= n ; j += i) {
bk[j] = 1;
d[j].push_back(i);
}
}
// d[j] j
for (int i = 2 ; i <= n ; i++){
cout << i << " ";
for (auto g : d[i]) cout << g << " ";
cout << endl;
}
return 0;
}
三)GCD-最大公约数
int a,b;
cout<<__gcd(a,b)<<endl;
if(__gcd(a,b)==1)//互质gcd(x,y)==1
cout<<"互质"<<endl;
四)LCM-最小公倍数
int a,b;
(a*b)/__gcd(a,b);
a/__gcd(a,b)*b;
五)唯一分解定理
PS:质因分解
#include <bits/stdc++.h>
using namespace std;
vector <int> vc;
int main(){
int x;
cin>>x;
for(int i=2;i*i<=x;i++){
if(x%i==0){
while(x%i==0){//求到x不能整除i为止
vc.push_back();
x/=i
}
}
}
if(x!=1)
vc.push_back(x);
for(auto g:vc)
cout<<g<<" ";
return 0;
}
六)取模
1、加法取模
(a+b)%10==(a%10+b%10)%10;
2、乘法取模
(a*b)%10==((a%10)*(b%10))%10;
七)组合定理
1、容斥定理
求1到N不能被2,3,5整除的数的个数
n-n/2-n/3-n/5+n/6+n/10+n/15-n/30;
2、抽屉原理
N个格子放N+1个球,至少一个格子有2个球
PS:K倍区间