首页 > 其他分享 >质数

质数

时间:2024-12-03 21:22:59浏览次数:4  
标签:标记 int 合数 扫描 void 质数

质数的判定

试除法:判定n是否为质数,扫描2~sqrt(n)即可,特判0和1这两个数,它们既不是质数,也不是合数。

bool is_prime(int n) {
    if (n < 2) return 0;
    for (int i = 2; i <= sqrt(n); i ++)
        if (n % i == 0) return 0;
    return 1;
}

质数的筛选

问题:给定一个整数n,求1~n之间的所有质数。

埃氏筛:从2开始从小到大扫描每个数x,标记它的所有倍数为合数,每当遇到一个未被标记的数,就是质数。

优化:2和3都会标记6,所以对于x,我们只需从x2开始标记即可。

复杂度O(nloglogn).接近线性,最常用。

 

void primes(int n) {
    memset(v, 0, sizeof(v));
    for (int i = 2; i <= n; i ++) {
        if (v[i]) continue;
        cout << i << endl;//i是质数
        for (int j = i; j <= n / i; j ++) v[i * j] = 1; 
    }
}

 

质因数分解

void divide(int n) {
    m = 0;
    for (int i = 2; i <= sqrt(n); i ++) {
        if (n % i == 0) {
            p[++ m] = i, c[m] = 0;
            while (n % i == 0) n /= i, c[m] ++;
        }
    }
    if (n > 1) p[++ m] = n, c[m] = 1;//n是质数
    for (int i = 1; i <= m; i ++)
        cout << p[i] << '^' << c[i] << '\n'; 
}

 

 

 

标签:标记,int,合数,扫描,void,质数
From: https://www.cnblogs.com/love-lzt/p/18584487

相关文章

  • [USACO1.5] 回文质数 Prime Palindromes
    题目传送门P1217[USACO1.5]回文质数PrimePalindromes题目描述因为151151151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以......
  • AcWing 196 质数距离(素数,筛法)
    问题:给定L,R,找出[L,R]中距离最近和最远的质数对。分析:注意到L,R的范围很大,到了int极限值,问题毫无疑问是筛质数,不能用普通的筛法筛出[1,R](复杂度)。埃氏筛法本质是倍数标记合数,注意到如果x是合数,那它一定有不大于sqrt(x)的因数y,那么x就可以被y倍数标记。步骤:1.埃氏筛找出[1,sqrt(R......
  • 2024-11-30:质数的最大距离。用go语言,给定一个整数数组 nums,请找出两个(可以是相同的)质
    2024-11-30:质数的最大距离。用go语言,给定一个整数数组nums,请找出两个(可以是相同的)质数在该数组中的下标之间的最大距离。提示:nums的长度在[1,3*10^5]之间。nums的每个元素的值在[1,100]。输入保证nums中至少有一个质数。输入:nums=[4,2,9,5,3]。输出:3。解释:nums[1]......
  • P1217 [USACO1.5] 回文质数 Prime Palindromes
    标题:P1217[USACO1.5]回文质数PrimePalindromes链接:https://www.luogu.com.cn/problem/P1217思路:1.暴力枚举,超时2.回文和质数共同判断,超时3.数字通过strings=to_string(n);转化为字符串,超时+:字符串转为数字intx=stoi(n);4.找规律,有偶数位的回文数(除了11)必然不是质数......
  • CSP/信奥赛C++语法基础刷题训练(23):洛谷P1217:[USACO1.5] 回文质数 Prime Palindromes
    CSP/信奥赛C++语法基础刷题训练(23):洛谷P1217:[USACO1.5]回文质数PrimePalindromes题目描述因为151151151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),......
  • 一个线性筛的多功能组合:筛法求质数+约数个数+约数和
    F:\BC\2024\9>main1活动代码页:9362 2X2=43 3X2=6 3X3=94X2=85 5X2=10 5X3=15 5X5=256X2=127 7X2=14 7X3=21 7X5=35 7X7=498X2=169X2=18 9X3=2710X2=2011 11X2=22 11X3=33 11X5=55 11X7=77 11X11=12112X2=2413 13X2=26 13X......
  • 「数学::质数」埃氏筛|欧拉筛(埃拉托斯特尼筛法|线性筛法)/ LeetCode 204(C++)
    目录概述1.埃氏筛思路复杂度Code2.欧拉筛(线性筛)思路复杂度Code总结概述上一节我们介绍了对判断一个数是否为质数的方法:「数学::质数」试除法/LuoguP5736(C++)那如果我们期望输出一个范围内的所有质数,使用试除法的时间复杂度是n√n,怎么办呢?LeetCode204:给定整......
  • 【AcWing】866~868. 质数
    #include<iostream>#include<math.h>usingnamespacestd;intn;boolis_prime(intx){if(x<2)returnfalse;for(inti=2;i<=x/i;i++){if(x%i==0)returnfalse;}returntrue;}intmain(){cin>>n;......
  • 经典小题——生成质数
    在写程序之前,我们先想想什么是质数1.是一个大于一的自然数2.不能被任何数整除(除了1和自身)那我们如何检测呢?可以用for循环的方法(其他也行,方法不唯一),因为不能除以自身,所以最少的结果也是2(因为自身除以自身等于一),那就可以写for(b=2;b<a/2;b++),总之我们想做好这个程序,只有创建一......
  • Python 判断质数的另一种方法
    质数就是大于等于2且只能被它本身及1整除的数,百度上关于质数的性质和相关的公式还有很多,不过有点高深难懂,尤其是对我这个数学不好的人来说。网上python判断质数的方法大多是下面这种:frommathimportsqrtdefis_prime(n):ifn==1: print("此数为不质数")......