【数论基础】

1.质数

质数筛(埃氏筛+线性筛)

//线性筛
#include 
#include 

using namespace std;

const int N= 1000010;

int primes[N], cnt;
bool st[N];

void get_primes(int n)
{
    for (int i = 2; i <= n; i ++ )
    {
        if (!st[i]) primes[cnt ++ ] = i;
        for (int j = 0; primes[j] <= n / i; j ++ )
        {
            st[primes[j] * i] = true;
            if (i % primes[j] == 0) break;
        }
    }
}

int main()
{
    int n;
    cin >> n;

    get_primes(n);

    cout << cnt << endl;

    return 0;
}

2.约数

1( 求约数个数

        把一个数N 写成:N = (p1^x1)(p^x2)(p3^x3)…(pk^xk),其中pi为质数。则N的约数个数为:(x1+1)(x2+1)(x3+1)…(xk+1)

2( 约数和

         把一个数N 写成:N = (p1^x1)(p^x2)(p3^x3)…(pk^xk),其中pi为质数。则N的约数个数为:(p1^x1+p1^x2+...+p1^xk)(p2^x1+p2^x2+...+p2^xk)…(pk^x1+pk^x2+...+pk^xk)

#include
#include
#include
#include

using namespace std;

typedef long long ll;

const int N = 200010;

int n;

int main(){
    cin>>n;
    
    unordered_map h;
    
    for(int i=2;i<=n/i;i++){
        while(n%i==0){
            h[i]++;
            n=n/i;
        }
    }
        
    if(n>1) h[n]++;
        
    ll res=1;
    for(auto x:h){
        res=res*(x.second+1);
    }
    cout<

3.求最大公约数 最小公倍数

ll gcd(ll x,ll y){  //求最大公约数
    return y==0 ? x : gcd(y,x%y);  //如果y==0,输出x,否则继续递归直到y==0
}

ll lcm(ll x,ll y){  //求最小公倍数
    return x/gcd(x,y)*y;
} 

1( 求多个数的最大公约数

#include
#include
#include

using namespace std;

typedef long long LL;

const int N = 200010;

int n;
int a[N];

int gcd(int a,int b){
    if(a>n;
    for(int i=0;i>a[i];
    }
    
    int yue=gcd(a[0],a[1]);
    for(int i=2;i

4.欧拉函数(phi/euler)

         把一个数N 写成:N = (p1^x1)(p^x2)(p3^x3)…(pk^xk),其中pi为质数。则N的约数个数为:N * (p1-1)/p1 * (p2-1)/p2 *… (pk-1)/pk

#include
#include
#include
#include

using namespace std;

typedef long long ll;

const int N = 200010;

int n;

ll s(ll x){
	ll res=x;
	
	for(int i=2;i<=x/i;i++){
		if(x%i==0){
			res=res/i*(i-1);
			while(x%i==0){
				x/=i;
			}
		}
	}
	if(x>1) res=res/x*(x-1);
	return res;
}


int main(){
	
	cin>>n;
	
	while(n--){
		ll x;
		cin>>x;
		cout<

5.快速幂

6.扩展欧几里得算法

你可能感兴趣的:(c++,图论,算法)