关于素数的算法小结

HSMS/SECS/GEM/GEM300半导体通讯协议介绍 HSMS/SECS/GEM/GEM300半导体通讯协议解决方案介绍 目录 SECS/GEM协议通讯 1 目录 2 1.介绍 3 1.1 产品概述 3 1.1.1 高扩展性 4 1.2 通讯实现 4 1.2.2多主机实现 4 1.3 当前的SEMI标准 5 1.3.1 功能跟友商对比 6 1.4 软件灵活性 7 1.5 无需学习SECS 7 1.6 自定义消息传递 8 1.7 记录收集 8 1.8 SECS Manual文档 8 1.9 产品清单 8 2 产品结构 9 2.1 控制面板 9 2.2 使用环境 阅读详情

1. 判断一个数是不是素数

解法1:最经典的版本


  1 #include <stdio.h>
  2 #include <math.h>
  3 #include <stdbool.h>  //C99 supports bool type
  4 
  5 bool is_prime(int n) {
  6     if (n <= 3) return n > 1;
  7     int sqrt_n = sqrt(n);
  8 
  9     for (int i = 2; i <= sqrt_n; ++i) {
 10         if (n % i == 0) return false;
 11     }
 12 
 13     return true;
 14 }
 15 
 16 int main()
 17 {
 18     int n;
 19     while(~scanf("%d", &n)) {
 20         printf("%d is_prime() = %d\n", n, is_prime(n));
 21     }
 22     return 0;
 23 }

解法2:参考自https://blog.youkuaiyun.com/afei__/article/details/80638460

思路是:质数有一个特点,就是它总是等于 6x-1 或者 6x+1,其中 x 是大于等于1的自然数。
证明:首先 6x 肯定不是质数,因为它能被 6 整除;其次 6x+2 肯定也不是质数,因为它还能被2整除;依次类推,6x+3 肯定能被 3 整除;6x+4 肯定能被 2 整除。那么,就只有 6x+1 和 6x+5 (即等同于6x-1) 可能是质数了。所以循环的步长可以设为 6,然后每次只判断 6 两侧的数即可。也即,我们对n,从5到sqrt(n),挨个判断5,7,11,13,17,19...是不是可以被n整除就可以了。

 16 bool is_prime_v2(int n) {
 17     if (n <= 3) return n > 1;
 18 
 19     if (n % 6 != 1 && n % 6 != 5) {
 20         return false;
 21     }
 22 
 23     int sqrt_n = sqrt(n);
 24     for (int i = 5; i <= sqrt_n; i += 6) {
 25         if (n % i == 0 || n % (i + 2) == 0) {
 26             return false;
 27         }
 28     }
 29     return true;
 30 }

2. 判断小于n的prime数的数目
LintCode 1324. countPrimes.

解法1:普通筛法

class Solution {
public:
    /**
     * @param n: a integer
     * @return: return a integer
     */
    int countPrimes(int n) {
        if (n == 1) return 0;
        int sqrtn = sqrt(n);
        vector<int> filter(n, 1);
        
        for (int i = 2; i <= sqrtn; ++i) {
            int j = i << 1;
            while (j < n) {
                filter[j] = 0;
                j += i;
            }
        }
        int count = 0;
        for (int i = 1; i <= n; ++i) {
            if (filter[i] == 1) {
                count++;
            }
        }
        
        return count - 1;   //1 is not prime
    }
};

普通筛法的另一个版本:
当n>=46350后会出错,因为n*n>MAX_INT

class Solution {
public:
    /**
     * @param n: a integer
     * @return: return a integer
     */

    int countPrimes(int n) {
        vector<int> flags(n + 1, 0);
        for (int i = 2; i <= n; ++i) {
            if (flags[i]) continue;
            //fails after i >=46350 as i*i exceeds MAX_INT
            for (int j = i * i; j <= n; j += i) {
                flags[j] = 1;
            }
        }
        int count = 0;

        
        for (int i = 2; i < n; ++i) {
            if (!flags[i]) count++;
        }
        return count;   //1 is not prime
    }
};

解法2:线性筛。。时间复杂度O(n)。
关于线性筛法的介绍见 https://zhuanlan.zhihu.com/p/42609585
 

class Solution {
public:
    /**
     * @param n: a integer
     * @return: return a integer
     */

    int countPrimes(int n) {
        vector<int> primes(n + 1, 0); //primes[i]: 0 => unprocessed, -1 => non-prime, >0 => a prime-number
        int count = 0;
        for (int i = 2; i < n; ++i) {
            if (!primes[i]) {
                primes[count++] = i;
            }
            for (int j = 0; j < count; ++j) {
                int product = primes[j] * i;
                if (product > n) break;
                primes[product] = -1; //just show it is not prime-number. It can be any number except 0.
                if (i % primes[j] == 0) break;
            }
        }
        return count;
    }
};

3. 质因数分解

LintCode 1295: Given a positive integer N, you need to factorize all integers between (1, N]. Then you have to count the number of the total prime numbers.

解法1: DP,时间复杂度是O(n * sqrt(n))。

class Solution {
public:
    /**
     * @param N: a number
     * @return: the number of prime numbers.
     */
    int Count_PrimeNum(int N) {
        int result = 0;
        vector<int> records(N + 1, 1);
        records[0] = 0, records[1] = 0;
        for (int i = 2; i <= N; ++i) {
            result += records[i];
                int count = N / i;
                for (int j = 1; j <= count; ++j) {
                    records[i * j] = records[i] + records[j];
                }
        }
        
        return result;
    }
};
 

解法2:基于Pollard_Rho算法,注意Pollard_Rho算法时间复杂度O(n^ 1/4),所以总的时间复杂度是O(n^ 5/4)。
 

class Solution {
public:
    /**
     * @param N: a number
     * @return: the number of prime numbers.
     */
    int Count_PrimeNum(int N) {
        int result = 0;
        vector<int> nums(N + 1, -1);
    
        for (int i = 2; i <= N; ++i) {
            result += Pollard_Rho(i);
        } 
        return result;
    }
    
private:
    int Pollard_Rho(int n) {
        int count = 0;
        //vector<int> result;
        int sqrtn = sqrt(n);
        for (int i = 2; i <= sqrtn;) {
            while (n % i == 0) {
                count++;
             //   result.push_back(i);
                n /= i;
            }
            
            if (i == 2) i += 1;
            else i += 2;
        }
      //  if (count == 0) count = 1;  // if n is non-2 prime
        if (n > 1) count++;
        return count;
    }
};

4. 丑数类题目
这类题目都是说有n个素数,然后让你求第k个丑数。算法就是给每个素数一个指针,然后n个指针挨个挨个试,看哪个素数的倍数最小。
LeetCode 313. Super Ugly Number

Write a program to find the nth super ugly number.

Super ugly numbers are positive numbers whose all prime factors are in the given prime list primes of size k.

Example:

Input: n = 12, primes = [2,7,13,19]
Output: 32 
Explanation: [1,2,4,7,8,13,14,16,19,26,28,32] is the sequence of the first 12 
             super ugly numbers given primes = [2,7,13,19] of size 4.

Note:

  • 1 is a super ugly number for any given primes.
  • The given numbers in primes are in ascending order.
  • 0 < k ≤ 100, 0 < n ≤ 106, 0 < primes[i] < 1000.
  • The nth super ugly number is guaranteed to fit in a 32-bit signed integer.
class Solution {
public:
    int nthSuperUglyNumber(int n, vector<int>& primes) {
        int num = primes.size();
        vector<int> indexes(num, 1); 
        vector<int> uglys(n + 1);
        uglys[1] = 1;
        for (int i = 2; i <= n; ++i) {
            int candidate = uglys[indexes[0]] * primes[0];
           // int candidate_index = 0;
            for (int j = 1; j < num; ++j) {
                int temp = uglys[indexes[j]] * primes[j];
                if (candidate > temp) {
                    candidate = temp;
                    //candidate_index = j;
                }
            }
           
            for (int j = 0; j < num; ++j) {
                if (candidate == (uglys[indexes[j]] * primes[j])) {
                   indexes[j]++;                    
                }
            }
            uglys[i] = candidate;

        }
        return uglys[n];
    }
};

 

Allegro层叠中的介电常数如何填写指导说明 在用Allegro进行PCB设计的时候,需要在cross-section中设置好每个层的信息,包括层命名,每层的厚度等等信息。但是对于有仿真需求或者等长设计需要使用ps作为延时单位的设计的时候,需要额外在层叠中填写介电常数的值,如下图。按照经验值填写为2.8,因为外层和平面层不会被树脂填充,铜皮层还是完整的铜皮,如下图。对应层叠将每层介质的介电常数的数值填入到PCB中去,油墨的介电常数填4。层叠中只给出了每个介质的介电常数,铜皮的介电常数却没有给出。所以正确填写介电常数的结果如下图。需要按照下面的规则来。 阅读详情

相关推荐

VUE3 实战手记(一)集成 EasyUI for Vue 组件库

本文详细介绍了如何在VUE3项目中集成EasyUI for Vue组件库,包括环境准备、基础安装、配置与集成、TypeScript类型问题解决以及组件实战等内容。EasyUI以其轻量级和开箱即用的特性,特别适合快速开发后台管理系统,提升开发效率。

weixin_30628801的博客 529

LintCode 1295: Prime Factor Statistics (质因数分解经典题)

1295.PrimeFactorStatistics GivenapositiveintegerN,youneedtofactorizeallintegersbetween(1,N]. Thenyouhavetocountthenumberofthetotalprimenumbers. Example input:6 output:7 explain:2=2,3=3,4=2*2,5=5,6=2*3,thenumber...

roufoo的博客 973

【vue看板】

大屏看板提示:以下是本篇文章正文内容,下面案例可供参考提示:这里对文章进行总结:代码量较多,看板中的。

weixin_46223284的博客 2772

素数算法吐血总结

扯淡 相信很多童鞋在OJ都遇到过关于素数的问题,对于素数相关问题,一般都会给出答案,但是相信并不是所有人能给出最优解,包括本菜鸟,故吐血整理一波,以供学习回顾。 素数定义 既然都说素数、质数什么的,那么什么是素数呢? 质数(Prime number),又称素数,指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个正因数的数)。大于1的自然数...

hao555sky 986

手把手教学,Python 游戏编程之实现飞机大战(含源代码)

我想大家都是有玩过类似飞机大战的射击类游戏,也享受目标被消除通过后带来的愉悦感。那么如果用Python来实现飞机大战游戏?下面就跟大家一起用Python来做一个小游戏,不仅可以从中感受到乐趣,还可以提升自己的能力。

veratata的博客 1万+

大模型应用开发 100 天:Python + LLM 从入门到精通 day01~环境搭建与开发工具

Day 1 正式开启《大模型应用开发 100 天》实战旅程。本文聚焦 AI 开发最容易被忽视却至关重要的环境搭建环节,系统讲解基于 pyenv、uv、VS Code 构建一套可复现、项目隔离的标准化 Python 开发工具链。你将掌握多 Python 版本管理、极速依赖安装、虚拟环境隔离、代码规范配置完整流程,配套可直接运行的环境校验脚本与 Mermaid 架构图,规避版本冲突、环境污染等高频踩坑问题,为后续 99 天 LLM 项目开发筑牢底层基础。来自华北理工大学段一凡的博客文章

段一凡的博客 247

求素数总结

简单素数

DiogenesClub的博客 376

SAP CPI 如何代理第三方接口?

代理接口是指在系统 A 和系统 B 之间引入一个中间层(如 SAP CPI),由中间层负责接收来自系统 A 的请求,进行必要的处理或转换,然后将请求转发给系统 B。由于 OData 服务通常使用 JSON 格式的数据,而某些内部系统可能需要 XML 格式,因此我们添加一个 JSON 到 XML 的转换器,以确保数据格式的兼容性。为了确保返回的数据格式符合内部系统的要求,添加一个 XML 到 JSON 的转换器,将 OData 服务的响应从 XML 转换为 JSON。在集成包中,添加一个新的集成流,命名为。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1748

C //例 5.9 输入一个大于3的整数n,判定它是否为素数(prime,又称质数)。

【代码】C //例 5.9 输入一个大于3的整数n,判定它是否为素数(prime,又称质数)。

Made in Code 2万+

从技术债红线到系统治理:透视 SAP Clean Core 中的 Level D

SAP推出的Clean Core分级体系将扩展风险划分为A到D四个等级,其中Level D代表最高风险类别,涉及直接修改标准代码、隐式增强、使用noAPI对象等不被推荐的做法。这些做法虽然短期见效快,但会带来升级冲突、数据完整性风险等长期问题。SAP强调治理重点不是完全消除经典ABAP,而是优先清理Level D对象,逐步向稳定接口迁移。典型案例显示,依赖内部细节的扩展往往在系统升级或云迁移时集中暴露出问题。企业应通过工具链持续监控Level D占比,将其纳入技术债管理范畴。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1063

YOLOv11改进策略【模型轻量化】| 替换骨干网络为 2024轻量化网络MoblieNetV4:移动生态系统的通用模型

一、本文介绍 本文记录的是基于MobileNet V4的YOLOv11目标检测轻量化改进方法研究。MobileNet V4通过整合UIB、Mobile MQA以及优化的NAS策略,能够在在不降低性能指标的前提下,降低计算成本。本文配置了原论文中MNv4-Conv-S、MNv4-Conv-M、MNv4-Conv-L、MNv4-Hybrid-M和MNv4-Hybrid-L五种模型,以满足不同的需求。 模型 参数量 计算量 推理速度 YOLOv11m 20.0M 67.6GFLOPs 3.5ms

Limiiiing的博客 4457

求素数的两种算法

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34365417的博客 372

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

素数判定算法小结

素数算法小结 发现很多程序设计题目都需要用到素数判定算法,我也遇到过很多,有的对时间复杂度没有严格的要求,这时候我们时候简单的判定算法即可,而有时对于时间的要求非常严格,这时候就需要一些改进和优化了。 素数的定义:除了1和它本身,不能被其他所有数整除; 下面我来总结一下我自己知道的算法: 最简单的判断: 根据定义,我们只需要从2开始到n结束,做一遍循环判断即可; ///

Coding猿 970

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

素数算法(小结)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34184158的博客 338

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

算法学习->素数与合数小结

一、素数打表 /* * 素数筛选,查找出小于等于MAXN的素数并连续存到prime[1...n]中 * prime[0]存素数的个数,初始为0 */ #include&lt;stdio.h&gt; #include&lt;string.h&gt; const int MAXN = 100000; int prime[MAXN + 1]; int vis[MAXN+1]; in...

wuyileiju__的博客 838

ACM -- 算法小结(十)素数的两种打表法

素数的两种打表法 下面介绍两种素数打表法,由于是两年前留下的笔记,所以没有原创链接~~ @_@!! 第一种疯狂打表法: 1 #include<stdio.h> 2 #include<math.h> 3 4 #define N 100000 5 6 int a[N]; 7 int s1[100000]; 8 ...

aijie6150的博客 426

算法分析与设计 专题五

依次在空格里面填上“1~9”,并检查这个数字是否合法(其所在的行、列,以及3X3的子区域里不存在重复的数字)。目标是用从 1 到 9 的十进制数字填充空单元格,每个单元格一位数字,这样在每一行、每列和每个标记的 3x3 子方块中,出现从 1 到 9 的所有数字。假设所有素数的‘相邻’关系已经建立完成了,那么在图里从A出发,每次向外走一步,用vis记录走过的结点,只要到达了B就停止搜索。但他需要一个聪明的人,告诉他是否真的有办法从他的客户建造他的巨型钢制起重机的地方到需要它的地方,所有街道都可以承载重量。

m0_73502929的博客 912

1013 数素数(C语言)

1013 数素数题目输入格式输出格式输入样例输出样例代码小结 题目 令 PiP_iPi​表示第 i 个素数。现任给两个正整数 M≤N≤104M≤N≤10^4M≤N≤104,请输出 PMP_MPM​到 PNP_NPN​的所有素数。 输入格式 输入在一行中给出MMM和NNN, 期间以空格分隔。 输出格式 输出从PMP_MPM​到 PNP_NPN​的所有素数,每10个数字占一行,但行末不得有多余空格。 输入样例 5 27 输出样例 11 13 17 19 23 29 31 37 41 43 47 53 59 6

qq_42766764的博客 527

素数学习小结

素数学习小结判断一个数是否是素数埃拉托斯特尼筛法在O(nloglogn)内筛选素数欧拉筛法在O(n)内筛选素数 判断一个数是否是素数 bool prime(int n){ if(n<=1)return false; for(int j=2;j*j<=n;j++){ if(n%j==0){ printf("%d\n",j); ...

antRain的博客 331

不断优化的素数算法

素数判断是算法中重要的一环,掌握优秀的素数判断方法是算法player的必修课。本文介绍的是由简到繁的素数算法,便于初学者从入门到精通。

Easenyang的博客 672

转素数算法大全

电子商务运营专家 1867

判断素数的五种方法最全埃筛素数欧筛素数孪生素数

前言: 判断素数是编程中经常应用的实例,是编程学习的重要知识,那么下面我将介绍五种判断素数的方法。 定义: 素数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。 简单来说就是,如果一个数只能被1和它本身整除,那么这个数就是素数。 比如:2 3 5 7 11 23… 0和1既不是素数也不是合数,2是最小的素数。 方法(一)暴力法 最简单最暴力的方法就...

m0_46260869的博客 7146

一篇不大正经的有关素数的小结

素数: 也称质数、不可约数,不存在非平凡因子。 平凡因子: 即对于任意数\(n\)都至少存在两个因子,一个是\(1\),另一个是\(n\)本身,我们就叫它俩为\(n\)的平凡因子,其他的,都为n的不平凡因子。 性质: 设\(\pi (n)\)为不超过\(n\)的质数个数 那么,\(\pi (n) \backsim \frac {n}{\ln n}\)(\(n\)越大,估计的越准确) 质因数分解: ...

weixin_30919571的博客 231

DAY 13 素数小结 超用心

本次小结要介绍所有有关素数的*知识,题解与模板! 这是目前为止写的最用心的一次博客了,耗时3个小时!边学边做题边写。 首先要介绍的是最普通的素数判定!!!!! 先上例题: 试题 算法提高 素数判断 资源限制 时间限制:1.0s 内存限制:512.0MB 编写一函数IsPrime,判断某个大于2的正整数是否为素数。 样例输入: 5 样例输出: yes 样例输入: 9 样例输出: no 注意:是素...

OWCYKH的博客 302

第100002个素数(埃拉托斯特尼筛法)

素数就是不能再进行等分的整数。比如:7,11。而9不是素数, 因为它可以平分为3等份。一般认为最小的素数是2,接着是3,5,… 请问,第100002(十万零二)个素数是多少? 请注意:2 是第一素数,3 是第二个素数,依此类推。#include<iostream> #define n 10000000 using namespace std; bool a[10000000];int mai

hg_zhh 1379

素数小结

素数小结 素数求解问题:1,给定一个数字,判断某数是否为素数;2,求10000内有多少素数3,已知一个数字是两个素数之积,求这个素数 素数筛选法,线性素数筛

DylanJoe的博客 495
上一篇: Linux 文件系统学习小结
下一篇: LintCode 45: Maximum Subarray Difference (MaxSubArray 变种)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值