首页 > 其他分享 >数学基础-素数

数学基础-素数

时间:2024-08-06 10:05:54浏览次数:8  
标签:lfloor int 质数 基础 rfloor times 素数 数学 primes

算术基本定理

任何一个大于 \(1\) 的正整数 \(N\) 都能唯一分解为有限个质数的乘积,可写作:

\[N = p_1^{c_1}p_2^{c_2}...p_m^{c_m} \]

其中 \(c_i\) 是正整数,\(p_i\) 是质数,且满足 \(p_1<p_2<...<p_m\)。

推论:\(N\) 的正约数的集合可写作:

\[\{p_1^{b_1}p_2^{b_2}...p_m^{b_m}\} \]

其中 \(b_i\) 是正整数,且满足 \(0\le b_i\le c_i\)。

\(N\) 的正约数个数为:

\[(c_1+1)\times(c_2+1)\times ...\times(c_m+1)=\prod_{i=1}^m(c_i+1) \]

\(N\) 的正约数的和为:

\[(1+p_1+p_1^2+...p_1^{c_1})\times(1+p_2+p_2^2+...p_2^{c_2})\times ...\times(1+p_m+p_m^2+...p_m^{c_m})=\prod_{i=1}^m(\sum_{j=0}^{c_i}p_i^j) \]

勒让德定理

\(N!\) 中质因子 \(p\) 的个数为:

\[\lfloor\frac{N}{p}\rfloor+\lfloor\frac{N}{p^2}\rfloor+...+\lfloor\frac{N}{p^{\lfloor \log_pN\rfloor}}\rfloor=\sum_{p^k\le N}\lfloor\frac{N}{p^k}\rfloor \]

例题:
阶乘分解

```cpp
void solve() {
    int n;
    cin >> n;
    sieve(n);

    for (int p : primes) {
        int cnt = 0;
        for (int i = p; i <= n; i *= p) {
            cnt += n / i; // 勒让德定理
        }
        cout << p << " " << cnt << "\n";
    }
}
# 筛法 
### 埃拉托斯特尼筛法:
筛掉质数的倍数,同一个数会被筛多遍,时间复杂度为 $O(n\log\log n)$
```cpp
vector<int> primes, v;

void sieve(int n) {
    primes.clear();
    v.assign(n + 1, 0);

    for (int i = 2; i <= n; i++) {
        if (v[i])
            continue;                      // 如果被筛过
        primes.push_back(i);               // 剩下的为素数
        for (int j = i; j * i <= n; j++) { // 筛掉其倍数
            v[i * j] = 1;
        }
    }
}

欧拉筛/线性筛:

确保每个合数只会被其最小质因子筛过,时间复杂度为 \(O(n)\)


void sieve(int n) {
    minp.assign(n + 1, 0);
    primes.clear();

    for (int i = 2; i <= n; i++) {
        if (minp[i] == 0) {
            minp[i] = i;
            primes.push_back(i);
        }
        for (int p : primes) {
            if (i * p > n || p > minp[i])
                break;
            minp[i * p] = p; // 只被最小质因子筛过
        }
    }
}

试除法

用 \(n\) 除以从 \(1\) 到 \(\sqrt n\) 的质数,能除则除,可在此期间找出 \(n\) 在 \(1\) 到 \(\sqrt n\) 之间的质数,若 \(n\) 最后不等于 \(1\),则剩余的数为 \(n\) 大于
\(\sqrt n\) 的唯一质数。

例题:
素数判断

void solve() {
    int x, t;
    cin >> x;
    t = x;
    vector<int> v;
    for (int p : primes) { // 试除法
        if (x == 1)
            break;
        if (x % p == 0) {
            v.push_back(p);
            while (x % p == 0) {
                x /= p;
            }
        }
    }
    if (x != 1) {
        v.push_back(x);
    }

    if (v[0] == t) {
        cout << "isprime\n";
    } else {
        cout << "noprime\n";
    }
    for (int i = 0; i < v.size(); i++) {
        cout << v[i] << " \n"[i == v.size() - 1];
    }
}

标签:lfloor,int,质数,基础,rfloor,times,素数,数学,primes
From: https://www.cnblogs.com/catting123/p/18344610

相关文章

  • excel基础
    1、表格格式化2、sum函数相对引用和绝对引用($)、混合应用3、函数使用逻辑函数IF(条件,"成功","失败")结合and|or使用条件求和SUMIF(单元格,"条件")相乘求和SUMPRODUCT(B4:D4,B5:D5)统计求和:AVERAGE(A1:B1)\MAX(单元格范围)\MINCOUNT(单元格范围)条件统计函数:COUNTIF(单......
  • 一个基础的js,html示例程序
    需求背景:一个html,一个js脚本。要求html里面提供若干按钮。第1个按钮,点击之后,触发js里面的add函数,第2个按钮点击之后触发js里面的del函数。第3个按钮,点击之后,在按钮右侧,显示当前时间,每点击一次刷新下一次。还有,在每个函数调用里面,函数开通打印当前时间戳(精确到毫秒),函......
  • 【Java基础】03选择结构
    if分支ifif(条件){代码块;}if...else...if(条件){代码块1;}else{代码块2;}if...elseif...else...if(条件1){代码块1;}elseif(条件2){代码块2;//elseif可以写多个}else{代码块3;//else可以省略不写}if嵌套if(条件1){......
  • 5.8软件工程基础知识-项目管理
    项目管理范围管理产品范围和项目范围管理过程WBS练习题进度管理基本原则过程活动资源估算软件规模估算方法进度安排关键路径法练习题成本管理过程成本的类型练习题软件配置管理配置项配置基线配置数据库练习题质量管理过程质量模型软件评审软件容错技术练习题风险......
  • selenium复习之---原理+基础用法
    简介1.是什么selenium是用来进行页面元素定位的第三方库,用来进行web自动化测试的工具,可以直接运行在浏览器中。2.原理:selenium在工作过程中有三个角色,selenium客户端、webdriver和浏览器selenium客户端是开发者与selenium的交互接口,它会发送指令给webdriver浏览器则接收来自......
  • 【C基础-按要求找数】一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方
    一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少完全平方数是指一个整数能够表示为某个整数的平方。换句话说,如果存在一个整数 n,使得 n^2=m,那么 m 就是一个完全平方数。使用C语言实现,具体代码:#include<stdio.h>#include<math.h>int......
  • Java爬虫技术:从基础到进阶的全面指南
    Java爬虫技术:从基础到进阶的全面指南大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们来探讨Java爬虫技术,从基础知识开始,逐步深入到进阶技术,并通过代码示例进行详细说明。一、Java爬虫的基础爬虫是一个自动化程序,旨在访问网页并提取数据。Jav......
  • Vs code写C语言代码配置(超级详细基础,小白也能看得懂)
    前言本文旨在为那些希望在VSCode中配置C语言开发环境的开发者提供一份详尽的指南。无论你是C语言的新手,还是希望提升开发效率的老手,本文都将引导你通过一系列简单的步骤,完成VSCode的C语言开发配置。我们将涵盖从安装VSCode开始,到配置编译器、调试器,以及安装必要的扩展,确保......
  • 2024 年需要了解的顶级大数据工具(非常详细)零基础入门到精通,收藏这一篇就够了
    大数据领域正在不断扩大:各类公司每年都在产生更多各种形式的数据。不断增长的数据量和多样性正在推动公司加大对大数据工具和技术的投资,以利用所有这些数据来改进运营、更好地了解客户、更快地交付产品,并通过分析应用程序获得其他业务优势。以下是受欢迎的开源工具和技术,用......
  • 【C++ 面试 - 基础题】每日 3 题(一)
    ✍个人博客:Pandaconda-CSDN博客......