试除法的妙用【O(√N) 复杂度】
一 、判某一质数
bool is_prime(int n) {for(int i=2;i<=sqrt(n);++i) {if(n%i==0) return false;}return true; }
二、分解质因数
#include<stdio.h> #include<algorithm> using namespace std; int n,cnt,p[1001],c[1001];void div() {int x=n;for(int i=2;i*i<=n;++i) {if(x%i==0) {p[++cnt]=i;while(x%i==0) {x/=i;c[cnt]++;}}}if(x>1) p[++cnt]=x,c[cnt]++; }int main() {scanf("%d",&n);div();for(int i=1;i<=cnt;++i) printf("%d^%d\n",p[i],c[i]);return 0; }
三、求正约数集合
·N本身
#include<stdio.h> #include<algorithm> using namespace std; int n,cnt,factor[1001];void Get() {for(int i=2;i*i<=n;++i) {if(n%i==0) {factor[++cnt]=i;if(i*i!=n) factor[++cnt]=n/i; }} }int main() {scanf("%d",&n);Get();for(int i=1;i<=cnt;++i) {printf("%d ",factor[i]);}return 0; }
·拓展——1~N(倍数法)
#include<stdio.h> #include<vector> #include<algorithm> using namespace std; int n; vector<int> v[1001];void Sol() {for(int i=1;i<=n;++i) {for(int j=1;i*j<=n;++j) {v[i*j].push_back(i);}} }int main() {scanf("%d",&n);Sol();for(int i=1;i<=n;++i) {printf("%d: ",i);for(int j=0;j<v[i].size();++j) {printf("%d ",v[i][j]);}printf("\n");}return 0; }
时间复杂度O(N + N/2 +N/3 ……+N/N) =O(NlogN)
倍数法的推论
1~N 每个数的约束个数总和大约为 NlogN
转载于:https://www.cnblogs.com/qseer/p/9786845.html
试除法的妙用【O(√N) 复杂度】相关推荐
- 求质数算法的N种境界[1] - 试除法和初级筛法
★引子 前天,俺在<俺的招聘经验[4]:通过笔试答题能看出啥?>一文,以"求质数"作为例子,介绍了一些考察应聘者的经验.由于本文没有政治敏感内容,顺便就转贴到俺在CSD ...
- 求质数算法的 N 种境界[1] - 试除法和初级筛法
★引子 前天,俺在<俺的招聘经验[4]:通过笔试答题能看出啥?>一文,以"求质数"作为例子,介绍了一些考察应聘者的经验.由于本文没有政治敏感内容,顺便就转贴到俺在 CS ...
- (转)求质数算法的N种境界[1] - 试除法和初级筛法
★引子 前天,俺在<俺的招聘经验[4]:通过笔试答题能看出啥?>一文,以"求质数"作为例子,介绍了一些考察应聘者的经验.由于本文没有政治敏感内容,顺便就转贴到俺在CSD ...
- 算法刷题-数论-试除法求约数、约数个数、约数之和、最大公约数(辗转相除法)
文章目录 acwing869. 试除法求约数 acwing870. 约数个数 acwing871. 约数之和 acwing872. 最大公约数 acwing869. 试除法求约数 acwing869. ...
- JavaScript实现trial Division试除法算法(附完整源码)
JavaScript实现trial Division试除法算法(附完整源码) trialDivision.js完整源代码 trialDivision.js完整源代码 export default fu ...
- 素数-试除法和埃式筛选法模板
试除法: bool is_prime(int n) {if (n <= 1) return false;for (int i = 2;i<=sqrt(n);i++)//这样写更好!if ( ...
- 866. 试除法判定质数
试除法判定质数 #include<iostream> #include<cmath> using namespace std; bool cmp(int x) {if (x== ...
- 试除法求最小N个素数之二
Trial division 试除法求最小N个素数是一个经典的算法. 这个算法不同于前一个版本<试除法求最小N个素数>的方法,也是一个比较快速的方法. 这个算法考虑以下两点: 1.偶数中只 ...
- 试除法计算最小的N个素数
Trial division 试除法求最小N个素数是一个经典的算法. 可以使用素数分类的性质来加快计算的速度. 除了2以外,素数只能是2n+1,n>=1. 除了2.3和5以外,素数只能是6n+1 ...
最新文章
- 微软最新启动了一个 I'm 活动
- CSS Border属性solid(实线)使用介绍
- Linux的IPC机制(二):Socket/管道/消息队伍/信号量
- 动态分辨率是什么意思_什么是1080p、2k、4k?视频基础参数解释
- 字符串-拆分和拼接字符串
- 计算机体系结构 -- 第一章3 -- 设计的定量4个原则
- 操作系统复习笔记 04 Process 进程
- leetcode 1143. 最长公共子序列(dp)
- (六)ElasticSearch 6.1.1聚合查询
- 怎么用记事本写java_如何用记事本写下第一个Java程序-Fun言
- python怎么输入一个数字并调用_python如何直接输入上一句话,如何快速打出上一句话...
- leetcode刷题:2.两数之和
- 使用skyeye运行《Linux设备驱动开发详解》的实例(一)
- OsharpNS轻量级.net core快速开发框架简明入门教程-多上下文配置(多个数据库的使用)...
- Oracle脚本(三)
- 炫酷而不复杂,RDP报表实用又方便
- 淘宝,京东,苏宁易购技术架构(路线)分析和比较
- 实现flv格式网络摄像头实时视频预览(nginx-rtmp,ffmpeg)
- MD5加密和SHA256加密
- 华东师范计算机模拟考试题答案,《计算机入门》模拟卷C答案-华东师范大学