求一个合数的最大质因子

news/2024/9/24 23:21:36/

【题目描述】
求一个合数的最大质因子。

【算法分析】
○ 一个合数 n 的非本身的最大因子为 n/2。
○ 判断素数的代码:
https://blog.csdn.net/hnjzsyjyj/article/details/119729401

#include <bits/stdc++.h>
using namespace std;bool isPrime(int n) {if(n<2) return false;for(int i=2; i<=sqrt(n); i++) {if(n%i==0) return false;}return true;
}int main() { //Find the primes between 2 and nint n;cin>>n;for(int i=2; i<=n; i++) {if(isPrime(i)) cout<<i<<" ";}
}/*
in:
100
out:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
*/

○ 若 n 是合数,则在 1~sqrt(n) 范围内进行因子判别。简证如下:
给定一个数字 n,朴素的求其因子的方法为枚举 [1,n] 的所有数进行余数为 0 判定,算法时间复杂度为 O(n)。此处加入一个小优化,即若 m 为 n 的因子,那么 n/m 必然也为 n 的因子,不妨设 m≤n/m,则有 m≤sqrt(n),所以只需在 [1,sqrt(n)] 内枚举所有数进行余数为 0 判定即可,算法时间复杂度优化为 O(sqrt(n))。

【算法代码】

#include <bits/stdc++.h>
using namespace std;void maxPrimeFactor(int n) {int ans=0;for(int i=n/2; i>1; i--) {if(n%i==0) {bool flag=true;for(int j=2; j*j<=i; j++) {if(i%j==0) {flag=false;break;}}if(flag && i>ans) ans=i;}}cout<<ans<<endl;
}int main() {int n;cin>>n;maxPrimeFactor(n);return 0;
}/*
in:180
out:5
*/



【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/119729401
https://blog.csdn.net/hnjzsyjyj/article/details/138047200
https://blog.csdn.net/hnjzsyjyj/article/details/138084023
https://blog.csdn.net/joe_g12345/article/details/135307949
https://blog.csdn.net/hnjzsyjyj/article/details/138091319


 


http://www.ppmy.cn/news/1431369.html

相关文章

基于nest框架的redis streams实现mq(bullmq)

官网文档地址&#xff1a;Documentation | NestJS - A progressive Node.js framework 0.队列简介 队列是一种强大的设计模式&#xff0c;可以帮助您处理常见的应用程序扩展和性能挑战。队列可以帮助您解决的一些问题示例如下: &#xff08;1&#xff09;平滑处理峰。例如&…

利用selenium发挥vip残存的价值

历史版本谷歌浏览器驱动下载地址 https://chromedriver.storage.googleapis.com/index.html 找到与你电脑当前谷歌浏览器版本一致的驱动然后下载下来(大版本一致即可)。我本地版本是 99.0.04844.51 我这里把 chromedriver 放到 /usr/local/bin 下面了。 启动测试窗口 这里需要…

为什么删除node_modules文件夹很慢

在处理Node.js项目时&#xff0c;删除node_modules文件夹常常是一个非常缓慢的过程。这个现象主要由以下几个原因造成&#xff1a; 1. 文件和目录数量庞大 node_modules 文件夹之所以删除缓慢&#xff0c;最直接的原因是它包含了大量的文件和目录。当你通过npm或yarn这样的包…

学习JavaEE的日子 Day40 反射案例

Day40 1.反射案例 之 万能数组扩容 public class Test01 {public static void main(String[] args) {String[] ss {"小希","小空","小丽","小光","小爱"};String[] newSS MyArrays.copyOf(ss, 8);System.out.println(My…

一文详解视觉Transformer模型压缩和加速策略(量化/低秩近似/蒸馏/剪枝)

视觉Transformer&#xff08;ViT&#xff09;在计算机视觉领域标志性地实现了一次革命&#xff0c;超越了各种任务的最先进模型。然而&#xff0c;它们的实际应用受到高计算和内存需求的限制。本研究通过评估四种主要的模型压缩技术&#xff1a;量化、低秩近似、知识蒸馏和剪枝…

【CVPR2024】文本到图像的行人再识别中的噪声对应学习

这篇论文的标题是《Noisy-Correspondence Learning for Text-to-Image Person Re-identification》,作者是来自中国四川大学、英国诺森比亚大学、新加坡A*STAR前沿人工智能研究中心和高性能计算研究所的研究人员。论文主要研究了文本到图像的行人再识别(Text-to-Image Person…

关于大模型训练微调的几个概念

什么是训练、预训练、微调&#xff1f; Post-pretrain、SFT、RLHF 是什么&#xff1f;有什么区别&#xff1f;RAG 与微调有什么区别&#xff1f;什么场景下需要微调&#xff1f;微调需要多少数据&#xff1f; 成本如何&#xff1f; 1、训练 总结来说&#xff0c;预训练是为了…

数组的排序算法

1.冒泡排序法 原理如下&#xff1a;每次比较数组中相邻的两个数组元素的值&#xff0c;将较小的数排在较大的数前面&#xff0c;可实现数组元素的从小到大排序&#xff1b;每次将较大的数排在较小的数前面&#xff0c;可实现数组元素从大到小排序。 /**每次比较数组相邻的两个…