数论 | 质数

文章目录

    • 质数的判定:试除法
    • 分解质因数:试除法
    • 筛质数
      • 朴素做法
      • 优化:埃氏筛法
      • 优化:线性筛法

质数的判定:试除法

不推荐i*i<=n而推荐i<=n/i的原因

可能存在i*i不溢出,但是(i+1)(i+1)溢出的情况

#include <iostream>
using namespace std;int n;bool isPrime(int n)
{if(n == 1)  return false;for(int i=2; i<=n/i; i++) {if(n%i == 0) {return false;}}return true;
}int main()
{cin >> n;for(int i=0; i<n; i++) {int a;cin >> a;if(isPrime(a))  cout << "Yes" << endl;else    cout << "No" << endl;}return 0;
}

时间复杂度: O ( n ) O(\sqrt{n}) O(n )

分解质因数:试除法

  • 分解质因数过程中,最多只含一个大于 n \sqrt{n} n 的质因子
#include <iostream>
using namespace std;void divide(int n)
{for(int i=2; i<=n/i; i++) {if(n%i == 0) {int cnt = 0;while(n%i == 0) {cnt++;n /= i;}cout << i << " " << cnt << endl;}}if(n > 1)   cout << n << " " << 1 << endl;cout << endl;
}int main()
{int n;cin >> n;for(int i=0; i<n; i++) {int a;cin >> a;divide(a);}return 0;
}

时间复杂度:

  • 最坏: O ( n ) O(\sqrt{n}) O(n )
  • 最好【n 是2的倍数】: O ( l g n ) O(lgn) O(lgn)

筛质数

朴素做法

#include <iostream>
using namespace std;const int N = 1000100;
int primes[N];
bool st[N];
int cnt = 0;void get_primes(int n)
{for(int i=2; i<=n; i++) {if(!st[i]) {primes[cnt++] = i;  // 将素数存起来}// 不管是合数还是质数,都用来筛掉后面它的倍数for(int j=i; j<=n; j+=i) {st[j] = true;}}
}int main()
{int n;cin >> n;get_primes(n);cout << cnt << endl;return 0;
}

时间复杂度:近似 O ( n l g n ) O(nlgn) O(nlgn)

  • T ( n ) = n 2 + n 3 + n 4 + . . . + 1 = n ∗ ( 1 2 + 1 3 + 1 4 + . . . + 1 n ) T(n) = \frac{n}{2}+\frac{n}{3}+\frac{n}{4}+...+1=n*(\frac{1}{2}+\frac{1}{3}+\frac{1}{4}+...+\frac{1}{n}) T(n)=2n+3n+4n+...+1=n(21+31+41+...+n1)

优化:埃氏筛法

  • 质数定理1~n中有 n l n n \frac{n}{ln{n}} lnnn 个质数
#include <iostream>
using namespace std;const int N = 1000100;
int primes[N];
bool st[N];
int cnt = 0;void get_primes(int n)
{for(int i=2; i<=n; i++) {if(!st[i]) {primes[cnt++] = i;  // 将素数存起来for(int j=i; j<=n; j+=i) {st[j] = true;   // 可以用质数就把所有的合数都筛掉}}}
}int main()
{int n;cin >> n;get_primes(n);cout << cnt << endl;return 0;
}

时间复杂度: O ( n l g l g n ) O(nlglgn) O(nlglgn)

优化:线性筛法

  • 每个合数的最小质因子是唯一的。
  • 合数 t 最小因子为 p,最大因数为 i,则有t = p*i,且 p 一定是质数【若 p 不为质数,可继续拆分出最小的质数,剩余部分可以合并到 i 里去】
  • 按照最小质因子筛选,可以保证每个数都只会被筛一遍
  • 虽然primes[]看上去还是那个primes[],但是i再也回不到过去,所以他们结合出来的东西也不会一样。
#include <iostream>
using namespace std;const int N = 1000100;
int primes[N];
bool st[N];
int cnt = 0;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++) {// 用最小质因子(对应primes数组)去筛合数// 确保会出现2*3但不会重复计算3*2st[primes[j]*i] = true;// 此时,primes[j]一定是i的最小质因子,无需继续遍历// primes要小与等于i的最小质因子// 这样能保证每个数遍历一遍,而没有重复if(i%primes[j] == 0)    break;// 如果这里不break的话,primes[j]已经是最小质因子,primes[j+1] > primes[j],一定不可能是最小质因子}}
}int main()
{int n;cin >> n;get_primes(n);cout << cnt << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/645015.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

山西电力市场日前价格预测【2024-01-25】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2024-01-25&#xff09;山西电力市场全天平均日前电价为274.83元/MWh。其中&#xff0c;最高日前电价为562.65元/MWh&#xff0c;预计出现在18:15。最低日前电价为0.00元/MWh&#xff0c;预计出…

《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第 2章感知机

文章目录 第 2章感知机2.1 感知机模型2.2 感知机学习策略2.2.1 数据集的线性可分性2.2.2 感知机学习策略 2.3 感知机学习算法2.3.1 感知机学习算法的原始形式2.3.2 算法的收敛性2.3.3 感知机学习算法的对偶形式 实践&#xff1a;二分类模型&#xff08;iris数据集&#xff09;数…

vue3-深入组件-组件注册和props更多细节

组件注册 定义好的组件需要注册才能被使用。 注册方式有两种 全局注册 局部注册 全局注册 .component() 方法&#xff0c;让组件在当前 Vue 应用中全局可用。 在 main.ts 中 import ./assets/main.cssimport { createApp } from vue import { createPinia } from pinia i…

Nodejs前端学习Day1

妈的&#xff0c;学vue3需要15.0以上的nodejs 文章目录 前言一、学习目标二、学习目录三、为什么JavaScript可以在浏览器中被执行四、为什么JavaScript可以操作DOM和BOM五、浏览器中的JavaScript运行环境总结 前言 妈的&#xff0c;学vue3需要15.0以上的nodejs 一、学习目标 二…

golang导入go-git错误记录

代码&#xff1a; package mainimport (...(略)"github.com/src-d/go-git"...(略) )...(略)func gitClone(workspace, url, referenceName string, auth ssh.AuthMethod) (*git.Repository, error) {return git.PlainClone(workspace, false,&git.CloneOptions{…

javascript设计模式-观察者和命令

观察者 是一种管理人与任务之间的关系的得力工具&#xff0c;实质就是你可以对程序中某个对象的状态进行观察&#xff0c;并且在其发生改变时能够得到通知。一般有两种实现方式推或拉&#xff0c;在这个过程中各方的职责如下&#xff1a; 订阅者可以订阅和退订&#xff0c;他…

递归和尾递归(用C语言解斐波那契和阶乘问题)

很多人都对递归有了解&#xff0c;但是为尾递归很少&#xff0c;所以这次来专门讲一讲关于尾递归的一些问题。 什么是尾递归 如果一个函数中所有递归形式的调用都出现在函数的末尾&#xff0c;我们称这个递归函数是尾递归的。因为在一些题目的做法中&#xff0c;我们可以发现…

数据库安全细解

数据库是为了实现一定目的按某种规则和方法组织起来的“数据”的“集合”。数据库可以直观的理解为存放数据的仓库&#xff0c;而里面的数据按照一定的格式存放&#xff0c;便于查找。 数据库的作用 1.实现数据共享&#xff0c;减少数据的冗余度&#xff1a;同文件系统相比&a…

蓝桥杯:1.幸运数字(Java)

目录 题目描述&#xff1a;答案&#xff1a;考点&#xff1a;代码实现&#xff1a; 题目描述&#xff1a; 哈沙德数是指在某个固定的进位制当中&#xff0c;可以被各位数字之和整除的正整数。 例如126是十进制下的一个哈沙德数&#xff0c;因为(126)1o mod (1&#xff0b;2&…

c语言之scanf函数

scanf函数语法格式与printf函数很相似&#xff0c;语法是scanf(格式控制,地址列表)组成 其中格式控制分为两部分&#xff0c;一部分由双引号括起来的&#xff0c;%和格式字符组成的格式字符串 普通字符串则是原样输出 地址列表是若干地址组成的表列&#xff0c;可以是变量的…

解决 Git:ssh: connect to host github.com port 22: Connection timed out 问题的三种方案

1、问题描述&#xff1a; 其一、整体提示为&#xff1a; ssh: connect to host github.com port 22: Connection timed out fatal: Could not read from remote repository. 中文为&#xff1a; ssh&#xff1a;连接到主机 github.com 端口 22&#xff1a;连接超时 fatal&a…

linux服务器ssh连接慢问题处理

一、 可能导致慢的几个原因 1、网络问题&#xff1a;网络延迟、带宽限制和包丢失等网络问题都有可能导致SSH连接变慢。 2、客户端设置&#xff1a;错误的客户端设置&#xff0c;如使用过高的加密算法或不适当的密钥设置&#xff0c;可能导致SSH连接变慢。 3、服务器负载过高…

MVC 和 MVVM的区别

MVC&#xff1a; M&#xff08;model数据&#xff09;、V&#xff08;view视图&#xff09;&#xff0c;C&#xff08;controlle控制器&#xff09; 缺点是前后端无法独立开发&#xff0c;必须等后端接口做好了才可以往下走&#xff1b; 前端没有自己的数据中心&#xff0c;太…

使用docker容器 将node应用程序打包成镜像

可以使得node服务应用程序可以通过流水线部署 安装docker 1、注意 我的服务器的系统是 centos7&#xff0c;所以这里写的是在centos7上按照的docker 注意&#xff1a;Docker 要求 CentOS 系统的内容版本高于3.10 uname -r打印&#xff1a;3.10.0-1160.105.1.el7.x86_64 //确定…

leetcode刷题(剑指offer) 240.搜索二维矩阵Ⅱ

240.搜索二维矩阵Ⅱ 编写一个高效的算法来搜索 *m* x *n* 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,…

【Effective C++】6. 继承与面向对象设计

Item32 确定你的public继承关系建模出is-a的关系 public继承的含义&#xff1a; is-a&#xff1a;student是一种person&#xff0c;person的范围更大在函数传参的过程&#xff0c;eta能同时接受person和student两种变量&#xff0c;反之不能 class Person {}; class Student…

27.移除元素(力扣LeetCode)

文章目录 27.移除元素&#xff08;力扣LeetCode&#xff09;题目描述方法一&#xff1a;vector成员函数&#xff1a;erase方法二&#xff1a;暴力解法方法三&#xff1a;双指针法 27.移除元素&#xff08;力扣LeetCode&#xff09; 题目描述 给你一个数组 nums 和一个值 val&…

[每日一题] 01.24 - 求三角形

求三角形 n int(input()) count1 (1 n) * n // 2 count2 n * n lis1 [str(i).zfill(2) for i in range(1,count1 1)] lis2 [str(i).zfill(2) for i in range(1,count2 1)]for i in range(0,len(lis2),n):print(.join(lis2[i:i n]))print()for i in range(1,n 1):tem…

代码中遇到的问题

编译器错误消息&#xff1a; CS1061&#xff1a; default_aspx 不包含 GridView1_SelectedIndexChanged 的定义&#xff0c;并且找不到接受类型为default_aspx的第一个参数的可访问扩展方法GridView1_SelectedIndexChanged&#xff08;是否缺少 using 指令或程序集引用&#xf…

[笔记]Spring AOP

Spring AOP&#xff08;Aspect Oriented Programming&#xff09; AOP将应用程序分为核心业务和非核心的公共功能&#xff0c;AOP的关注点是系统中的非核心的公共功能&#xff1b; AOP可以通过预编译或者运行期动态代理的方式&#xff0c;为横跨多个对象&#xff08;没有继承关…