一、定义:
1、质数():如果p除了显然约数(1 和 p)外没有其他约数,那么称p为素数(不可约数)。

2.合数():a不是素数,则称a为合数。

二、性质:
1、如果a为合数,则必可以拆分为a=b*c()。

2、如果质数p有大于1的因数d,则p一定等于d。

3、大于1的合数a一定可以拆分为多个质数的乘积。

4、大于1的合数a必有质数p导致批 p | a()。

5、质数有无穷多个。

6、大于4的质数都可以分解成的形式。

证明:
一个数k(大于3)%6可能会有余数:0,1,2,3,4,5
余数0,2,4 则k必为偶数
余数为3 3+6n=3+3*2n=3*(2n+1),为合数
只剩余数1,5 为 6n+1 和 6n-1

三、质数计数函数:

表示小于或等于n的素数的个数。

四、质数判定:

1、暴力枚举:

bool isPrime(int n){if(n<2)return false;for(int i=2;i<n;i++){if(n%i==0)return false;}return true;
}

时间复杂度O(n),容易超时。

2、对半测试:
一个数的最小非1的因数为2,所以这个数最大的因数会小于等于n/2。

bool isPrime(int n){if(n<2)return false;for(int i=2;i<=n/2;i++){if(n%i==0)return false;}return true;
}

3、简单检测:

这样做是十分稳妥了,但不一定所有数都要判断。

很容易发现这样一个事实:如果a是n的约数,那么也是n的约数。

这个结论告诉我们,对于每一对 ,只需要检验其中的一个就好了。为了方便起见,我们之考察每一对里面小的那个数。不难发现,所有这些较小数就是这个区间里的数。

由于1肯定是约数,所以不检验它。

bool isPrime(int n){if(n<2)return false;for(int i=2;i*i<=n;i++){if(n%i==0)return false;}return true;
}

五、筛数:
1、埃氏筛)

不是质数的数不筛 2 3 4 5 6 7 8 9 10
2 \ 0 1 0 1 0 1 0 1
3 \ \ 0 0 1 0 0 1 0
4 \ \ \ \ \ \ \ \ \
5 \ \ \ \ 0 0 0 0 1
6 \ \ \ \ \ \ \ \ \
7 \ \ \ \ \ \ 0 0 0
8 \ \ \ \ \ \ \ \ \
9 \ \ \ \ \ \ \ \ \
结果 质数 质数 合数 质数 合数 质数 合数 合数 合数

先用2去筛,即把2留下,把2的倍数剔除掉

再用下一个质数,也就是3筛,把3留下,把3的倍数剔除掉;

接下去用下一个质数5筛,把5留下,把5的倍数剔除掉;

不断重复下去…

void ass(int n){bool vis[n+1];int prime[n+1],len=0;for(int i=2;i<=n;i++){if(!vis[i]){prime[++len]=i;for(int j=2;i*j<=n;j++){vis[i*j]=1;}}}
}

2、欧拉筛:
在埃氏筛的运算中,10被算了两次,特别浪费。

void ols(int n){int a[n+1],b[n+1];for(int i=2;i<=n;i++){if(a[i]==0){b[++k]=i;}for(int j=1;i*j<=n;j++){if(i*b[j]>n)break;a[i*b[j]]=1;if(i%b[j]==0)break;}  }
}

六、真题演练:洛谷(P2441 角色属性树)

题目描述:

绪萌同人社是一个有趣的组织,该组织结构是一个树形结构。有一个社长,直接下属一些副社长。每个副社长又直接下属一些部长……。

每个成员都有一个萌点的属性,萌点属性是由一些质数的萌元素乘积构成(例如,猫耳的值是2,弱气的值是3,黄毛的值是5,病娇的值是7,双马尾的值是11等等)

举个例子,正妹是双份的猫耳,而且有一份弱气,她的属性值为2*2*3=12。

现在组员关心一个问题,希望知道离自己最近且有相同萌元素上司是谁,例如,属性值为2、4、6、45这样的属性值都算是和正妹有相同的属性。

然而,组员可能会随时变化自己的属性。啊。。感觉好麻烦啊。。

输入格式:

第一行,n,k 表示成员数与询问的次数

第二行,n个数,分别是1~n号成员的属性值

接下来n-1行,x_i,y_i 表示x_i是y_i的上司。

接下来来k行,有两种情况

1 u_i 询问离u_i成员最近且有相同萌元素上司。

2 u_i a 更改u_i的属性值为a

输出格式:

对于每个1类型的询问,输出符合要求的编号。如果没有符合要求的编号,输出-1。

输入样例:

4 6
10 8 4 3
1 2
2 3
3 4
1 1
1 2
1 3
1 4
2 1 9
1 4

输出样例:

-1
1
2
-1
1

说明提示:

对于20%的数据,没有修改的操作。

对于50%的数据,n<=100,修改次数<10

对于100%的数据,n<=200000,k<100000 ,修改次数<=50,a_i<=2^31-1

UPD:本题测试数据随机,可能是假题。

思路:

使用vector建一棵树,记录上司是谁。再用暴力dfs搜索。

实现:

#include <iostream>
#include <algorithm>
#include <iomanip>
#include <cstring>
#include <fstream>
#include <sstream>
#include <vector>
#include <string>
#include <cstdio>
#include <cmath>
#include <deque>
#include <queue>
#include <stack>
#include <list>
#include <map>
using namespace std;
const int N = 2e5 + 10;
const int INF = 0x3f3f3f3f;
int n,k,a[N],x,y,op;
vector<int>v[N];
int gcd(int a,int b){if(a<b){swap(a,b);}if(a%b==0)return b;if(a==1||b==1)return 1;return gcd(b,a%b);
}
int dfs(int u,int pos){int len=v[u].size();if(len<1){return -1;}else{for(int i=0;i<len;i++){if(gcd(a[v[u][i]],a[pos])>1){return v[u][i];}}for(int i=0;i<len;i++){return dfs(v[u][i],pos);}}
}
int main(){cin >>n>>k;for(int i=1;i<=n;i++){cin >>a[i];}for(int i=1;i<=n-1;i++){cin >>x>>y;v[y].push_back(x);}for(int i=1;i<=k;i++){cin >>op;if(op==1){cin >>x;cout <<dfs(x,x)<<endl;}else{cin >>x>>y;a[x]=y;}}return 0;
}

2022.6.2 质数(素数)与合数相关推荐

  1. Java 洛谷 求质数(素数)、合数、因数、最大公约数、最小公倍数

    什么是因数? "因数是指整数a除以整数b(b≠0) 的商正好是整数而没有余数,我们就说b是a的因数.而小学数学定义 :假如a*b=c(a.b.c都是整数),那么我们称a和b就是c的因数.&q ...

  2. 素数(质数)与合数的研究

    不是所有的质数都被隔开,2 和 3 就是相邻的: 对一个质数做因子分解时,只有 1 和本身.因此将质数个小球,或其他什么物品,排列成几行几列的形式,是做不到的. 1. 筛选法:不超过 NN 的一切素数 ...

  3. 素数(质数),合数 ,偶数 , 奇数 ,约数(因数) ,因子 , 质因子 , 哥德巴赫猜想定义

    约数(因数):如果整数a除以整数b(b≠0) 除得的商正好是整数而没有余数,我们就说a能被b整除,或b能整除a.a称为b的倍数,b称为a的约数.例如4 的约数(因数) 有 1 , 2 , 4 : 因子 ...

  4. Java分解质因数(每个非素数(合数)都写成几个素数(也可称为质数)相乘的形式)

    分解质因数(5分) 题目内容: 每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数.比如,6可以被分解为2x3,而24可以被分解为2x2x2x3. 现在 ...

  5. python质数判断if isprime_使用Python判断质数(素数)的简单

    这篇文章主要介绍了使用Python判断质数(素数)的简单方法讲解,经常被用来做科学计算的Python处理这种小问题当然手到擒来^_-需要的朋友可以参考下 质数又称素数.指在一个大于1的自然数中,除了1 ...

  6. python判断素数的函数_使用Python判断质数(素数)的简单方法讲解

    质数又称素数.指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数.素数在数论中有着很重要的地位.比1大但不是素数的数称为合数.1和0既非素数也非合数.质数是与合数相对立的两个概念 ...

  7. 第十四届蓝桥杯集训——for——判断质数/素数

    第十四届蓝桥杯集训--for--判断质数/素数 目录 第十四届蓝桥杯集训--for--判断质数/素数 1.什么是质数/素数? 2.整除代码的表达方式? 3.判断素数代码 4.素数的价值 5.素数分布规 ...

  8. python 素数库_使用Python判断质数(素数)的简单方法讲解

    质数又称素数.指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数.素数在数论中有着很重要的地位.比1大但不是素数的数称为合数.1和0既非素数也非合数.质数是与合数相对立的两个概念 ...

  9. 判断 一个数 是不是 质数 / 素数

    判断 一个数 是不是 质数 / 素数 [面试必备 100题 系列 ]- 001 - 判断 一个数 是不是 质数 / 素数 一.命题分析: 质数 又称 素数.指整数在一个大于1的 自然数 中,除了1和此 ...

  10. 用php输出一百以内的素数,php输出1000以内质数(素数)示例

    php输出1000以内质数(素数)示例 复制代码 代码如下: for($i = 2; $i < 1001; $i++) { $primes = 0; for($k = 1; $k <= $ ...

最新文章

  1. COM笔记-CoCreateInstance
  2. java抽象类与接口区别6_java基础知识(6)---抽象类与接口
  3. App设计灵感之十二组精美的手机闹钟App设计案例
  4. 前端学习(1728):前端系列javascript之状态栏分析
  5. 当S8遇上边缘计算:谈阿里云ENS对直播业务场景的支撑
  6. jmeter-5.3 测试http接口动态数据 windows+Linux双环境
  7. excel设置默认值_职场办公必备的7个Excel应用技巧解读,易学易懂,收藏备用!...
  8. POJ-2480 Longge's problem 欧拉函数
  9. Discuz3.2开启图片列表显示教程
  10. 经典机器学习系列(八)【支持向量机】
  11. 教学思路SQL之入门习题《学员成绩》 二、基础单表查询
  12. 喵喵玩 v3.8.5
  13. _stdcall和_cdecl
  14. 计算机专业考研北京有哪些学校,计算机考研北京地区学校大全!
  15. js和css压缩工具
  16. 《白帽子讲Web安全 》 随手记(一)
  17. 使用Python对excel中的数据进行处理
  18. docker desktop 运行mysql
  19. HTML三种引入样式的方式
  20. android程序设计魔方矩阵,【图片】【记录】零基础用c4droid写一个3D魔方软件_c4droid吧_百度贴吧...

热门文章

  1. java代码开发类似知网导出_知网语义相似度计算java实现 - 源码下载|其它|中文信息处理|源代码 - 源码中国...
  2. vue三级路由router-view不显示问题,路由嵌套不显示
  3. 佛祖保佑永无BUG python版本
  4. 5G SCMA MPA算法
  5. python吃内存吗_python – 为什么泡菜吃内存?
  6. Neo4j导入本地CSV文件三元组关系生成图谱
  7. 利用python编写爬虫程序,从招聘网站上爬取数据,将数据存入到MongoDB数据库中,将存入的数据作一定的数据清洗后做数据分析,最后将分析的结果做数据可视化
  8. pg_rewind详解
  9. 如何在Windows10下安装ubuntu双系统(无U盘)
  10. 计算机右下角时间格式,电脑右下角时间格式_电脑右下角时间不准