数论问题(算法村第十三关黄金挑战)

辗转相除法

8 和 12 的最大公因数是 4,记作 gcd(8,12)=4。辗转相除法最重要的规则是:

moda ÷ b 的余数, 则gcd(a, b) = gcd(b, mod),直到a % b == 0时,返回 b的值

gcd(546, 429)

= gcd(429, 117)

= gcd(117, 78)

= gcd(78, 39)

= 39

public int gcb(int a, int b)
{int mod = 0;do{mod = a % b;a = b;b = mod;}while (mod != 0);return a;	//此时 a 的值==最后一个除数
}

质数

判断一个数是否是质数

public boolean isPrime(int num)
{int sqrt = (int)Math.sqrt(num);for (int i = 2; i <= sqrt; i++)if(num % i == 0)return false;return true;
}

计数质数

204. 计数质数 - 力扣(LeetCode)

给定整数 n ,返回 所有小于非负整数 n 的质数的数量

示例 1:

输入:n = 10
输出:4
解释:小于 10 的质数一共有 4, 它们是 2, 3, 5, 7

提示:

  • 0 <= n <= 5 * 10
超时的暴力解法
public int countPrimes(int n)
{int count = 0;// 0 and 1 are not prime numbersfor (int i = 2; i < n; i++)if(isPrime(i))count++;return count;
}public boolean isPrime(int num)
{int sqrt = (int)Math.sqrt(num);for (int i = 2; i <= sqrt; i++)//如果 num 是合数,那 sqrt 两边一定存在一对 nums 的因数  if(num % i == 0)return false;return true;
}

时间复杂度:O(n * n^ 1/2)
空间复杂度:O(1)

一般来说题目里 n 的规模达到 10^5 及以上时,需要实现的程序的时间复杂度最高只能是 O(n logn)

埃氏筛

204. 计数质数 - 力扣(LeetCode)

在这里插入图片描述

public int countPrimes(int n)
{boolean[] primes = new boolean[n];Arrays.fill(primes, true);   //初始化为全部都是质数//从2枚举到sqrt(n)(不含)for (int i = 2; i * i < n; i++){if (primes[i])//从i²开始,将所有i的倍数标记为非质数//从这里我们就可以理解为什么不用枚举到sqrt(n)了。因为我们只用考虑n-1及以内的数,而sqrt(n)^2 = nfor (int j = i * i; j < n; j += i)primes[j] = false;}//统计质数的个数int count = 0;for (int i = 2; i < n; i++)if (primes[i]) count++;return count;
}

在这里插入图片描述

丑数

把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)

根据丑数的定义,0 和负整数不是丑数。

当 n>0 时,若 n 是丑数,则 n 可以写成 n = 2^a + 3^b + 5^c 的形式,其中 a,b,c 都是非负整数。

特别地,当 a,b,c 都是 0 时,n=1。所以1也是丑数

对 n 反复除以 2,3,5,直到 n 不再包含质因数 2,3,5。若剩下的数等于 1,则说明 n 不包含其他质因数,n是丑数;否则,说明n包含其他质因数,n不是丑数。

public boolean isUglyNum(int num)
{if (num <= 0)return false;int[] factors = {2, 3, 5};//如果num能整除任何一个因子,则继续除以这个因子//每次整除会使以factor为底的指数减一//当指数为零时,跳出while循环for (int factor : factors)while (num % factor == 0)num =  num / factor;//若num能被所有质因子整除,则num最后==1,即num为丑数return  num == 1;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/427690.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Scapy编程指南(基础概念)

Scapy编程指南&#xff08;基础概念&#xff09; Scapy是什么 Scapy是Python中一个非常强大的库&#xff0c;它专门用于处理、发送和捕获网络协议中的数据包&#xff0c;它允许开发人员通过Python代码构建、解析和发送自定义网络协议的数据包。Scapy提供了一种直观、灵活的方…

免费SSL申请和自动更新

当前是在mac下操作 安装certbot # mac下brew安装即可 brew install certbotcentos 安装 centos安装文档 申请泛解析证书 sudo certbot certonly --manual --preferred-challengesdns -d *.yourdomain.com## 输出 Saving debug log to /var/log/letsencrypt/letsencrypt.lo…

四、Flask学习之JavaScript

四、Flask学习之JavaScript JavaScript&#xff0c;作为一种前端脚本语言&#xff0c;赋予网页生动的交互性和动态性。通过它&#xff0c;开发者能够操作DOM&#xff08;文档对象模型&#xff09;实现页面元素的动态改变、响应用户事件&#xff0c;并借助AJAX技术实现异步数据…

云计算项目五:部署数据库服务mysql |部署共享存储服务NFS | 配置网站服务

部署数据库服务mysql |部署共享存储服务NFS | 配置网站服务 案例1:配置逻辑卷步骤一:创建LV步骤二:格式化案例2:配置数据库服务器步骤一:安装软件MySQL服务软件(2台数据库服务器都要安装)步骤二:挂载lv设备步骤三:启动服务步骤四:管理员登录案例3:配置主从同步步骤一…

网工内推 | 国企、合资公司IT专员,13薪,NA以上即可

01 上海新徐汇&#xff08;集团&#xff09;有限公司 招聘岗位&#xff1a;IT运维 职责描述&#xff1a; 1.负责制定网络体系搭建、IP地址分配、网络拓扑图、无线网络等&#xff1b; 2.负责桌面运维技术支持&#xff0c;确保各类系统和终端设备正常工作&#xff1b; 3.负责弱电…

【并发编程】活锁

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;并发编程 ⛺️稳重求进&#xff0c;晒太阳 活锁 定义&#xff1a;活锁出现在两个线程互相改变对象的结束条件&#xff0c;最后谁也无法结束 代码示例 public class TestLiveLock {stati…

微机原理常考填空以及注意事项第(三)弹~

前面已经总结了200个常考题注意事项&#xff0c;可以翻阅查看。 以下仅个人总结的易错以及注意事项&#xff1a; 1&#xff0c;汇编语言源程序的基本格式&#xff1a; DATA SEGMENT;存放数据项的数据段 DATA ENDS EXTRA SEGMENT;存放数据项的附加段 EXTRA ENDS STACK1 SEGM…

React实现字符串首字母大写、翻转字符串、获取用户选定的文本

目录 React实现字符串首字母大写React实现翻转字符串React获取用户选定的文本 React实现字符串首字母大写 import React, { useState } from reactfunction App() {const [inputText, setInputText] useState()const [outputText, setOutputText] useState()const handleInpu…

编辑图片加文字的软件?分享4款!

在数字时代&#xff0c;图片和文字的结合已经成为信息传递的重要方式。为了满足广大自媒体人和内容创作者的需求&#xff0c;本文将为您推荐几款编辑图片加文字的软件&#xff0c;帮助您轻松实现创意表达。 魔法抠图大师 作为一款专业的图片编辑软件&#xff0c;还提供了多种编…

四、MyBatis 动态语句

本章概要 动态语句需求和简介if 和 where 标签set 标签trim 标签(了解)choose/when/otherwise 标签foreach 标签sql 片段 4.1 动态语句需求和简介 经常遇到很多按照很多查询条件进行查询的情况&#xff0c;比如智联招聘的职位搜索等。其中经常出现很多条件不取值的情况&#…

IDEA插件(MyBatis Log Free)

引言 在Java开发中&#xff0c;MyBatis 是一款广泛使用的持久层框架&#xff0c;它简化了SQL映射并提供了强大的数据访问能力。为了更好地调试和优化MyBatis应用中的SQL语句执行&#xff0c;一款名为 MyBatis Log Free 的 IntelliJ IDEA 插件应运而生。这款插件旨在帮助开发者…

STM32F407移植OpenHarmony笔记1

参考文档&#xff1a; OpenAtom OpenHarmonywidthdevice-width,initial-scale1.0https://docs.openharmony.cn/pages/v3.2/zh-cn/device-dev/get-code/gettools-acquire.md/ 搭建环境 安装linux系统: Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-91-generic x86_64) 下载源代码&a…