算法-最大公约数

1、约数:

1.1 试除法求约数

原理:只需要遍历最小的约数即可,较大的那个可以直接算出来。

import java.util.*;
public class Main {static Scanner sc = new Scanner(System.in);public static void main(String[] args) {int t = sc.nextInt();while(t-- > 0){solution();System.out.println();}}public static void solution(){int n = sc.nextInt();Set<Integer> set = new TreeSet<>(Integer::compare);for(int i = 1;i <= n / i;i++) {if(n % i == 0) {set.add(i);set.add(n / i);}}set.forEach((l)-> System.out.print(l + " "));}
}

1.2 求约数的个数

原理:

任何一个数 x 都可以写成为:x = q1a1 + q2a2 + … + qnak

因此:约数个数的公式为:

count = (a1 + 1) × (a2 + 1) × … × (ak + 1)

同理:约数的和的公式为:

sum = (q10 + q11 + q12 + … + q1a1) × (q20+ q21 + q22 + … + q2a2) × … × (qn0 + qn1 + … + qnak)

例如:12 = 22 + 31

约数个数为:(2 + 1)× (1 + 1) = 2 × 3 = 6

验证:12 的约数有 1、2、3、4、6、12 一共 六 个

约数和为:(20 + 21 + 22) × (30 + 31) = 28

验证:1 + 2 + 3 + 4 + 6 + 12 = 28

import java.util.*;public class Main{static int N = (int) (1e9+7);public static void main(String[] args){Scanner sc = new Scanner(System.in);// 利用hash表存储这个数的因数以及指数 x = q1a1 + q2a2 + ... + qnak Map<Integer,Integer> map = new HashMap<>();int n = sc.nextInt();while(n-- > 0) {int x = sc.nextInt();for(int i = 2;i <= x / i;i++) {while(x % i == 0) {x /= i;map.put(i,map.getOrDefault(i,0)+1);}}if(x > 1) // 如果 x > 1,表示这个数没有被除进,直接将这个数放进去就好map.put(x,map.getOrDefault(x,0)+1);}long res = 1;// 这些乘积的结果的 约数的个数为 指数 + 1的乘积Set<Map.Entry<Integer, Integer>> entries = map.entrySet();for(Map.Entry<Integer, Integer> e : entries) {res = res * (e.getValue() + 1) % N;}System.out.println(res);}
}
import java.util.*;public class Main{static int N = (int) (1e9+7);public static void main(String[] args){Scanner sc = new Scanner(System.in);// 利用hash表存储这个数的因数以及指数Map<Integer,Integer> map = new HashMap<>();int n = sc.nextInt();while(n-- > 0) {int x = sc.nextInt();for(int i = 2;i <= x / i;i++) {while(x % i == 0) {x /= i;map.put(i,map.getOrDefault(i,0)+1);}}if(x > 1) // 如果 x > 1,表示这个数没有被除进,直接将这个数放进去就好map.put(x,map.getOrDefault(x,0)+1);}long res = 1;// 这些乘积的结果的 约数的个数为 指数 + 1的乘积Set<Map.Entry<Integer, Integer>> entries = map.entrySet();for(Map.Entry<Integer, Integer> e : entries) {long t = 1;int p = e.getKey();int a = e.getValue();// 这里就是算(q1^0 + q2^1 + q3^2 + ... + qn^a1)while(a -- > 0)  t = (t * p + 1) % N;res = res * t % N;}System.out.println(res);}
}

1.3 最大公因数(最大公约数)

原理:根据 (a,b) = (a,R) ===> 表示,a 和 b的共因数等于a和a % b的公因数

import java.util.*;
public class Main{public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();while(n-- > 0) {int a = sc.nextInt();int b = sc.nextInt();System.out.println(gcd(a,b));}}static int gcd(int a,int b) {// 关键点:// 如果 a > b 那末就是想要的,b a换位,并且用小的取余大的// 如果 a < b 那末,由于 a%b=a 因此,相当于换位,值不变return b == 0 ? a : gcd(b,a%b);}
}

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

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

相关文章

湖北楚大夫

品牌出海已成为众多企业拓展业务、提升竞争力的关键战略。楚大夫(chudafu.com)作为一家专注于品牌出海、海外网络营销推广以及外贸独立站搭建的公司&#xff0c;凭借其专业、高效、创新的服务模式&#xff0c;致力于成为中国企业走向国际市场的坚实后盾与得力伙伴。楚大夫通过综…

Flutter 学习之旅 之 flutter 使用 connectivity_plus 进行网路状态监听(断网/网络恢复事件监听)

Flutter 学习之旅 之 flutter 使用 connectivity_plus 进行网路状态监听&#xff08;断网/网络恢复事件监听&#xff09; 目录 Flutter 学习之旅 之 flutter 使用 connectivity_plus 进行网路状态监听&#xff08;断网/网络恢复事件监听&#xff09; 一、简单介绍 二、conne…

从零开始实现 C++ TinyWebServer 处理请求 HttpRequest类详解

文章目录 HTTP 请求报文HttpRequest 类实现 Init() 函数实现 ParseRequestLine() 函数实现 ParseHeader() 函数实现 ParsePath() 函数实现 ParseBody() 函数实现 ParsePost() 函数实现 ParseFromUrlEncoded() 函数实现 UserVerify() 函数实现 Parse() 函数HttpRequest 代码Http…

systemd-networkd 的 *.network 配置文件详解 笔记250323

systemd-networkd 的 *.network 配置文件详解 笔记250323 查看官方文档可以用 man systemd.network命令, 或访问: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html 名称 systemd.network — 网络配置 概要 network.network 描述 一个纯…

自定义mavlink 生成wireshark wlua插件错误(已解决)

进入正题 python3 -m pymavlink.tools.mavgen --langWLua --wire-protocol2.0 --outputoutput/develop message_definitions/v1.0/development.xml 编译WLUA的时候遇到一些问题 1.ERROR:SCHEMASV:SCHEMAV_CVC_ENUMERATION_VALID 3765:0:ERROR:SCHEMASV:SCHEMAV_CVC_ENUMERAT…

计算机操作系统(四) 操作系统的结构与系统调用

计算机操作系统&#xff08;四&#xff09; 操作系统的结构与系统调用 前言一、操作系统的结构1.1 简单结构1.2 模块化结构1.3 分层化结构1.4 微内核结构1.5 外核结构 二、系统调用1.1 系统调用的基本概念1.2 系统调用的类型 总结&#xff08;核心概念速记&#xff09;&#xf…

深入解析 Spring IOC AOP:原理、源码与实战

深入解析 Spring IOC & AOP&#xff1a;原理、源码与实战 Spring 框架的核心在于 IOC&#xff08;控制反转&#xff09; 和 AOP&#xff08;面向切面编程&#xff09;。今天&#xff0c;我们将深入剖析它们的原理&#xff0c;结合源码解析&#xff0c;并通过 Java 代码实战…

LLM之RAG理论(十四)| RAG 最佳实践

RAG 的过程很复杂&#xff0c;包含许多组成部分。我们如何确定现有的 RAG 方法及其最佳组合&#xff0c;以确定最佳 RAG 实践&#xff1f; 论文 《Searching for Best Practices in Retrieval-Augmented Generation》给出了回答。 本文将从以下三方面进行介绍&#xff1a; 首先…

利用knn算法实现手写数字分类

利用knn算法实现手写数字分类 1.作者介绍2.KNN算法2.1KNN&#xff08;K-Nearest Neighbors&#xff09;算法核心思想2.2KNN算法的工作流程2.3优缺点2.4 KNN算法图示介绍 3.实验过程3.1安装所需库3.2 MNIST数据集3.3 导入手写数字图像进行分类3.4 完整代码3.5 实验结果 1.作者介…

C语言-适配器模式详解与实践

文章目录 C语言适配器模式详解与实践1. 什么是适配器模式&#xff1f;2. 为什么需要适配器模式&#xff1f;3. 实际应用场景4. 代码实现4.1 UML 关系图4.2 头文件 (sensor_adapter.h)4.3 实现文件 (sensor_adapter.c)4.4 使用示例 (main.c) 5. 代码分析5.1 关键设计点5.2 实现特…

Rust函数、条件语句、循环

文章目录 函数**语句与表达式**条件语句循环 函数 Rust的函数基本形式是这样的 fn a_func(a: i32) -> i32 {}函数名是蛇形风格&#xff0c;rust不在意函数的声明顺序&#xff0c;只需要有声明即可 函数参数必须声明参数名称和类型 语句与表达式 这是rust非常重要的基础…

maptalks图层交互 - 模拟 Tooltip

maptalks图层交互 - 模拟 Tooltip 图层交互-模拟tooltip官方文档 <!DOCTYPE html> <html><meta charsetUTF-8 /><meta nameviewport contentwidthdevice-width, initial-scale1 /><title>图层交互 - 模拟 Tooltip</title><style typet…

好吧好吧,看一下达梦的模式与用户的关系

单凭个人感觉&#xff0c;模式在达梦中属于逻辑对象合集&#xff0c;回头再看资料 应该是一个用户可以对应多个模式 问题来了&#xff0c;模式的ID和用户的ID一样吗&#xff1f; 不一样 SELECT USER_ID,USERNAME FROM DBA_USERS WHERE USERNAMETEST1; SELECT ID AS SCHID, NA…

python socket模块学习记录

python黑马程序员 通过python内置socket模块&#xff0c;在电脑本地开发一个服务器&#xff0c;一个客户端&#xff0c;连接后进行连续的聊天。服务器和客户端均可输入exit&#xff0c;主动退出连接。 服务器开发.py import socket# 创建Socket对象 socket_server socket.s…

7-2 sdut-C语言实验-逆序建立链表

7-2 sdut-C语言实验-逆序建立链表 分数 20 全屏浏览 切换布局 作者 马新娟 单位 山东理工大学 输入整数个数N&#xff0c;再输入N个整数&#xff0c;按照这些整数输入的相反顺序建立单链表&#xff0c;并依次遍历输出单链表的数据。 输入格式: 第一行输入整数N;&#xff…

针对永磁电机(PMM)的d轴和q轴电流,考虑交叉耦合补偿,设计P1控制器并推导出相应的传递函数

电流控制回路:针对永磁电机(PMM)的d轴和q轴电流&#xff0c;考虑交叉耦合补偿&#xff0c;设计P1控制器并推导出相应的传递函数。 1. 永磁电机&#xff08;PMM&#xff09;的数学模型 在同步旋转坐标系&#xff08; d − q d - q d−q 坐标系&#xff09;下&#xff0c;永磁同…

ROS多机通信(四)——Ubuntu 网卡 Mesh 模式配置指南

引言 使用Ad-hoc加路由协议和直接Mesh模式配置网卡实现的网络结构是一样的&#xff0c;主要是看应用选择&#xff0c; Ad-Hoc模式 B.A.T.M.A.N. / OLSR 优点&#xff1a;灵活性高&#xff0c;适合移动性强或需要优化的复杂网络。 缺点&#xff1a;配置复杂&#xff0c;需手动…

chap1:统计学习方法概论

第1章 统计学习方法概论 文章目录 第1章 统计学习方法概论前言章节目录导读 实现统计学习方法的步骤统计学习分类基本分类监督学习无监督学习强化学习 按模型分类概率模型与非概率模型 按算法分类按技巧分类贝叶斯学习核方法 统计学习方法三要素模型模型是什么? 策略损失函数与…

爬虫案例-爬取某站视频

文章目录 1、下载FFmpeg2、爬取代码3、效果图 1、下载FFmpeg FFmpeg是一套可以用来记录、转换数字音频、视频&#xff0c;并能将其转化为流的开源计算机程序。 点击下载: ffmpeg 安装并配置 FFmpeg 步骤&#xff1a; 1.下载 FFmpeg&#xff1a; 2.访问 FFmpeg 官网。 3.选择 Wi…

车载以太网网络测试-22【传输层-DOIP协议-5】

目录 1 摘要2 DoIP时间参数2.1 ISO 13400定义的时间参数2.2 参数示例 3 DoIP节点内部状态机4 UDSonIP概述5 总结 1 摘要 本文继续对DOIP协议进行介绍&#xff0c;主要是DOIP相关的时间参数、时间参数定义以及流程示例。推荐大家对上文专题进行回顾&#xff0c;有利于系统性学习…