题目3180:蓝桥杯2023年第十四届省赛真题-互质数的个数======及探讨互质专题

news2024/12/23 4:04:41

原题链接

https://www.dotcpp.com/oj/problem3162.html

想直接看题解的,跳转到第三次尝试即可。

在这里插入图片描述
已AC。

解析:

(1)首先大家要知道什么叫互质:
在这里插入图片描述
以及它们的性质:
在这里插入图片描述

欧拉函数

在数论中,对正整数n,欧拉函数φ(n)是小于或等于n的正整数中与n互质的数的数目。此函数以其首名研究者欧拉命名,它又称为φ函数(由高斯所命名)或是欧拉总计函数(totient function,由西尔维斯特所命名)。

例如φ(8) = 4,因为1,3,5,7均和8互质。

也可以从简化剩余系的角度来解释,简化剩余系(reduced residue system)也称既约剩余系或缩系,是m的完全剩余系中与m互素的数构成的子集,如果模m的一个剩余类里所有数都与m互素,就把它叫做与模m互素的剩余类。在与模m互素的全体剩余类中,从每一个类中各任取一个数作为代表组成的集合,叫做模m的一个简化剩余系。

(1,3,5,7)就构成了8的一个简化剩余系。

参考链接: https://zhuanlan.zhihu.com/p/151756874

第一次尝试代码:

package Dotcpp;

import java.io.*;
import java.util.Scanner;

public class 题目3180蓝桥杯2023年第十四届省赛真题_互质数的个数 {
	private static long mod = 998244353L;
	private static long a,b,ans;


	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

	static StreamTokenizer st = new StreamTokenizer(br);

	static int nextLong() throws Exception {st.nextToken();return (int) st.nval;}

	static PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));


	public static void main(String[] args) throws Exception {
		//Scanner scanner = new Scanner(System.in);
		a = nextLong();
		b = nextLong();
		long n = Euler_pow(a,b-1);
		long m = Euler(a);
		System.out.println((n*m%mod)%mod);
	}

	private static long Euler(long n) {
		long res = n;
		for (long i = 2; i * i <= n; ++i) {
			if (n % i == 0) {
				res = res / i * (i - 1);
				while (n % i == 0) {
					n /= i;
				}
			}
		}
		if (n > 1) {
			res -= res / n;
		}
		return res;
	}

	private static long Euler_pow(long a, long b) {
		long ans = 1;
		while (b != 0){
			if (b % 2 ==1){
				ans*=(a%mod)%mod;
			}
			a*=a%mod;
			a=a%mod;
			b /= 2;
		}
		return ans;
	}
}

运行结果:

在这里插入图片描述

分析:

第二次尝试代码:

package Dotcpp;

import java.util.Scanner;

public class 题目3180蓝桥杯2023年第十四届省赛真题_互质数的个数__运行错误32{
	private static long mod = 998244353L;
	private static long a, b, res;

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		a = scanner.nextInt();
		b = scanner.nextInt();
		long n = Euler_pow(a, b);
		res = n;
		for (int i = 2; i <= n / i; i++) {
			if (n % i == 0) {
				while (n % i == 0) {
					n /= i;
					n%=mod;
				}
				res = (res - res / i);
				res%=mod;
			}
		}
		if (n > 1) {
			res = (res - res / n);
			res%=mod;
		}
		System.out.println(res%=mod);

	}

	private static long Euler_pow(long a, long b) {
		long ans = 1;
		while (b > 0) {
			if ((b & 1) > 0) {
				ans = ((ans % mod) * (a % mod)) % mod;
			}
			a = ((a % mod) * (a % mod)) % mod;
			b /= 2;
		}
		return ans;
	}

}

运行结果:

在这里插入图片描述

补充说明:

这第二次是我参考其他语言的代码,转化成Java来实现的。

如图可见:

在这里插入图片描述
感谢大佬提供的思路: https://blog.dotcpp.com/a/95823

分析:

当时一想,一种方法超时,一种方法会导致报错,两者结合一起,是不是可行呢。?

第三次尝试:

package Dotcpp;

import java.io.*;
import java.util.Scanner;

public class 题目3180蓝桥杯2023年第十四届省赛真题_互质数的个数 {
	private static long mod = 998244353L;
	private static long a,b,res;



	public static void main(String[] args) throws Exception {
		Scanner scanner = new Scanner(System.in);
		a = scanner.nextLong();
		b = scanner.nextLong();
		long n = Euler_pow(a,b);

		res = n;
		for (int i = 2; i <= n / i; i++) {
			if (n % i == 0) {
				while (n % i == 0) {
					n /= i;
					n%=mod;
				}
				res = (res - res / i);
				res%=mod;
			}
		}
		if (n > 1) {
			res = (res - res / n);
			res%=mod;
		}
		scanner.close();
		System.out.println(res%=mod);
	}

	private static long Euler(long n) {
		long res = n;
		for (long i = 2; i * i <= n; ++i) {
			if (n % i == 0) {
				res = res / i * (i - 1);
				while (n % i == 0) {
					n /= i;
				}
			}
		}
		if (n > 1) {
			res -= res / n;
		}
		return res;
	}

	private static long Euler_pow(long a, long b) {
		long ans = 1;
		while (b > 0) {
			if ((b & 1) > 0) {
				ans = ((ans % mod) * (a % mod)) % mod;
			}
			a = ((a % mod) * (a % mod)) % mod;
			b /= 2;
		}
		return ans;
	}
}

结果:

在这里插入图片描述

分析:

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

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

相关文章

世界读书日|这些值得程序员反复阅读的经典书

2023年是第28个世界读书日&#xff0c;每年的这个时候&#xff0c;小编都会准备一份书单与您分享。 与经典同行&#xff0c;伴书香成长。小编今天推荐一份值得程序员反复阅读的经典书。 1、浪潮之巅 第四版 这不只是一部科技产业发展历史集…… 更是在这个智能时代&#xff…

【远程工具】- MobaXterm 的下载、安装、使用、配置【Telnet/ssh/Serial】

一、MobaXterm 概述 在远程终端工具中&#xff0c;secureCrt 和 XShell 是两款比较有名的远程工具&#xff0c;但这两款软件现在都是收费的&#xff0c;有些公司不允许破解使用。今天就推荐一款免费的、免安装的、功能丰富的远程终端软件–MobaXterm。 MobaXterm是由Mobatek开…

JavaScript概述三(循环结构+BOM浏览器对象模型+JSON对象)

1.循环结构 1.1 普通循环(for循环,while循环,do……while循环) JavaScript中的普通循环和Java中的普通循环基本类似&#xff0c;此处以for循环为例&#xff0c;while和do……while便不再赘述。 <script type"text/javascript">var ary1new Array(1,false,嘿嘿…

Redis队列Stream、Redis多线程详解(三)

Redis中的线程和IO模型 什么是Reactor模式 &#xff1f; “反应”器名字中”反应“的由来&#xff1a; “反应”即“倒置”&#xff0c;“控制逆转”,具体事件处理程序不调用反应器&#xff0c;而向反应器注册一个事件处理器&#xff0c;表示自己对某些事件感兴趣&#xff0…

CTA进网测试《5G消息 终端测试方法》标准依据:YDT 3958-2021

GB 21288-2022 强制国标要求变化​ 与GB 21288-2007相比&#xff0c; 新国标主要有以下变化&#xff1a; 1. 增加职业暴露定义&#xff1a; 2. 增加吸收功率密度定义&#xff1a; 3. 增加不同频率、不同人体部位适用的暴露限值&#xff1a; 4. 增加产品说明书的注释&#xff1a…

ArcGIS Pro用户界面

目录 1 功能区 1.1 快速访问工具栏 1.2 自定义快速访问工具栏 1.3 自定义功能区选项 1.3.1 添加组和命令 1.3.2 添加新选项卡 2 视图 3 用户界面排列 ​编辑 4 窗格 4.1 内容窗格 4.2 目录窗格 4.3 目录视图&#xff08;类似ArcCatalog&#xff09; 4.4 浏览对话框…

注册表取证

目录 操作系统安装时间 计算机名称 本地用户 最后登录的用户 当前登录用户 U盘序列号 USB挂载的盘符 卷标名称 安装的程序 ​编辑卸载的程序 最近使用的文件 最近运行的命令行 操作系统安装时间 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion…

无需代码!新人可操作!分享20个可视化大屏(内附下载)

做前端开发的各位&#xff0c;大都知晓老板钟爱的可视化大屏—清晰、便捷、撑排面&#xff0c;轻轻松松打破数据孤岛等一系列问题。我真的深有体会&#xff0c;前些天&#xff0c;老板去人家公司开会&#xff0c;回来就把这大屏安排上了。之前就认为大屏也不过是面子工程&#…

03 - 大学生如何使用GPT

大学生如何使用GPT提高学习效率 一、引言 在当今的高速发展的信息时代&#xff0c;大学生面临着越来越多的学习挑战。作为一种先进的人工智能技术&#xff0c;GPT为大学生提供了一种强大的学习工具。本文将介绍大学生在不同场景中如何使用GPT来提高学习效率&#xff0c;并给出…

「区间DP-步入」凸多边形的划分

凸多边形的划分 题目描述 给定一个具有N个顶点的凸多边形&#xff0c;将顶点从1至N标号&#xff0c;每个顶点的权值都是一个正整数。将这个凸多边形划分成N-2个互不相交的三角形&#xff0c;试求这些三角形顶点的权值乘积和至少为多少。 输入描述 输入第一行为顶点数N第二行…

云智慧陆兴海:统一运维体系为数字政府建设保驾护航

2023年4月6日至7日&#xff0c;由长春市人民政府、吉林省政务服务和数字化建设管理局主办的《2023长春数字经济发展论坛》在长春隆重举行。 本次论坛旨在探讨数字经济的理论创新、实践探索和发展路径&#xff0c;推动长春市乃至吉林省的数字化转型和高质量发展。第十二届全国政…

无源滤波器为什么能滤波?

滤波器能够滤波的本质是利用构造特定的阻抗特性引起反射和损耗来实现对频率的选择。 如果从能量守恒的角度来讲&#xff0c;被抑制掉的信号去哪里了&#xff1f;​ 我们先看一下基本电路原理&#xff0c;上图中&#xff0c;负载接收的功率为 我们知道&#xff0c;最大功率传输…

ChatGPT: 从GPT-3.5到GPT-4,探索语言模型的演进之路

ChatGPT: 从GPT-3.5到GPT-4&#xff0c;探索语言模型的演进之路 引言 人工智能语言模型的演进 随着人工智能的快速发展&#xff0c;语言模型作为自然语言处理领域的一项重要技术也在不断演进。从最初的基于规则的系统&#xff0c;到基于统计的模型&#xff0c;再到近年来的深度…

【Scala入门】scala基础语法:to和until,if-else和for循环,while循环

目录&#xff1a; 【Scala入门】Scala下载及安装&#xff08;Windows&#xff09;以及Idea创建第一个scala项目_水w的博客-CSDN博客 【Scala入门】scala基础语法&#xff1a;类和对象&#xff0c;变量和常量_水w的博客-CSDN博客 目录 2.4 数据类型 2.5 to和until&#xff0c;…

破防了,这才是机房运维的高效方法

在云计算、5G等新业务野蛮生长的催化下&#xff0c;机房规模与容量也呈倍速扩张。机房安全是业务发展的底座。提升机房设备安全和管理效率&#xff0c;避免人为因素导致的事故发生&#xff0c;是机房运维的必要前提。 安全生产重于泰山&#xff0c;除了日常的科学防护&#xf…

C++函数适配器和函数包装器:让你的函数更灵活

&#x1f4d6;作者介绍&#xff1a;22级树莓人&#xff08;计算机专业&#xff09;&#xff0c;热爱编程&#xff1c;目前在c&#xff0b;&#xff0b;阶段>——目标Windows&#xff0c;MySQL&#xff0c;Qt&#xff0c;数据结构与算法&#xff0c;Linux&#xff0c;多线程&…

机器学习——K-Means算法优化(一)代价函数

机器学习——K-Means算法优化&#xff08;一&#xff09;代价函数 文章目录 机器学习——K-Means算法优化&#xff08;一&#xff09;代价函数一、K-Means算法&#xff08;代价函数&#xff09;二、代码部分 在K-Means算法中&#xff0c;对K个质心的选择&#xff0c;容易陷入局…

Java基础之字节流

文章目录 一、字节输入流1.1 字节输入流读取单个字节1.2 字节输入流一个字节一个字节读取数据1.3 字节输入流一个字节数组一个字节数组读取数据 二、字节输入流读出数据乱码问题三、字节输出流3.1 一次向指定文本写入一个字节数据3.2 一次向指定文本写入一个字节数组数据3.3 一…

CentOS7---基于 CentOS 7 构建 LVS-DR 群集

一、对比 LVS 负载均衡群集的 NAT 模式和 DR 模式&#xff0c;比较其各自的优势 NAT模式(地址转换) 原理&#xff1a;就是把客户端发来的数据包的IP头的目的地址&#xff0c;在负载均衡器上换成其中一台RS的IP地址 并发至此RS来处理&#xff0c;RS处理完后把数据交给负载均衡器…

LeetCode热题HOT100:单词拆分、环形链表 II、LRU 缓存

LeetCode热题HOT100 139. 单词拆分 题目&#xff1a;给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重复使用。 示例 1&#xf…