质因数分解

简介: 笔记

质因数分解


#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#define ll long long
#define maxn 1005
using namespace std;
int p[maxn],c[maxn],tot;
void devide(int n){
    tot=0;
    for(int i=2;i<=sqrt(n);++i){
        if(n%i==0){
            ++tot;
            p[tot]=i;
            c[tot]=0;
            while(n%i==0){
                n/=i;
                ++c[tot];
            }
        }
    }
    if(n>1){
        ++tot;
        p[tot]=n;
        c[tot]=1;
    }
    return;
}
int main(){
    int n;
    scanf("%d",&n);
    devide(n);
    for(int i=1;i<=tot;++i){
        printf("%d %d\n",p[i],c[i]);
    }
    return 0;
}


欧拉筛版质因数分解


先进行欧拉筛 找出每个数的最小质因子7.png

//核心:n只会被最小质因子筛掉
int cnt; //素数的个数
int v[N]; //存每个数的最小质因子
int prime[N]; //存素数
void get_primes(int n){
    for(int i = 2;i <= n; ++i){
        if(v[i] == 0){
            v[i] = i;
      prime[++cnt] = i;
        }
        for(int j = 1 ; j <= cnt;++j){
            if(prime[j] > v[i] || i * prime[j] > n) break;
            v[prime[j] * i] = prime[j];
        }
    }
}
void divide(int n) {
    while (v[n]) {
        printf("%d ", v[n]); // 在前
        n /= v[n]; //在后
    }
}
目录
相关文章
|
6月前
|
人工智能 算法 BI
数学知识:质数与约数
数学知识:质数与约数
71 0
筛质数、分解质因数和快速幂的应用
筛质数、分解质因数和快速幂的应用
62 0
|
6月前
|
算法 测试技术 C++
【数学归纳法 组合数学】容斥原理
【数学归纳法 组合数学】容斥原理
一个求公约数和公倍数的有趣求法
一个求公约数和公倍数的有趣求法
57 0
|
算法 搜索推荐 程序员
欧几里得算法
欧几里得算法(Euclidean algorithm)是一种计算两个数的最大公约数(Greatest Common Divisor,简称 GCD)的算法。欧几里得算法的基本思想是通过辗转相除的方式,将两个数逐步缩小,直到它们的公约数为止。欧几里得算法的时间复杂度为 O(log n)。
227 1
【每周一坑】​正整数分解质因数 +【解答】计算100以内质数之和
关于分解质因数:每个合数都可以写成几个质数相乘的形式,其中每个质数都是这个合数的因数,把一个合数用质因数相乘的形式表示出来,叫做分解质因数。分解质因数只针对合数。
|
算法 C语言 C++
【数论】最大公约数、约数的个数与约数之和定理
先来科普下什么是约数:当a能被b整除,我们就说b为a的约数,b的倍数为a
122 0
|
算法
质数筛法:朴素素数筛,埃氏筛,欧式筛
质数筛法:朴素素数筛,埃氏筛,欧式筛
152 0