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

news/2024/11/29 8:48:34/

原题链接

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.ppmy.cn/news/48724.html

相关文章

python图片爬虫

百度图片爬虫&#xff0c;基于python3 个人学习开发用 单线程爬取百度图片。 #!/usr/bin/env python -- coding:utf-8 -- import argparse import os import re import sys import urllib import json import socket import urllib.request import urllib.parse import url…

外包干了4年,直接废了···

有一说一&#xff0c;外包没有给很高的薪资&#xff0c;是真不能干呀&#xff01; 先说一下自己的情况&#xff0c;大专生&#xff0c;19年通过校招进入湖南某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0…

ChatGPT聊天机器人程序

ChatGPT聊天机器人程序是一种基于人工智能技术的智能对话程序&#xff0c;利用ChatGPT等自然语言处理模型和算法实现与用户的交互&#xff0c;回答问题、提供服务等。 ChatGPT聊天机器人程序通常包括以下模块&#xff1a; 输入模块&#xff1a;用于接收用户输入的信息&…

cf1653c通过操作让数组序列呈现某种规律 C. Differential Sorting

G 题面 1635/c Problem - 1635c - Codeforces 给你一个数组a 的n个 元素的数组。 你可以执行以下操作&#xff0c;但不超过n 次&#xff1a; 选择三个指数x,y,z (1≤x<y<z≤n) 并将ax 替换为 ay-az . 操作后&#xff0c;|ax| 需要小于1018 . 你的目标是使得到的数组不…

JavaWeb——TCP协议的相关特性

目录 一、TCP 1、特性 2、确认应答 &#xff08;1&#xff09;、定义 &#xff08;2&#xff09;、原理 &#xff08;3&#xff09;、接收缓冲区 3、超时重传 &#xff08;1&#xff09;、丢包 &#xff08;2&#xff09;、定义 &#xff08;3&#xff09;、分类 二、…

ONVIF协议介绍

目录标题 一、 ONVIF协议简介&#xff08;Introduction to ONVIF Protocol&#xff09;1.1 ONVIF的发展历程&#xff08;The Evolution of ONVIF&#xff09;1.2 ONVIF的主要作用与优势&#xff08;The Main Functions and Advantages of ONVIF&#xff09; 二、 ONVIF协议的底…

SpringBoot整合ClickHouse

目录 1 ClickHouse准备操作2 使用jdbc方式操作ClickHouse3 SpringBoot的整合ClickHouse 1 ClickHouse准备操作 使用的JDBC方式操作clickhouseclickhouse与springboot的整合使用 提前创建一张表&#xff0c;并为该表插入一些实验数据 create table t_order01(id UInt32,sku_id…

图的存储(邻接矩阵邻接表)

图的存储 文章目录 图的存储1 邻接矩阵1.1 邻接矩阵存储结构定义1.2 完整代码应用 2 邻接表2.1 邻接表存储结构定义2.2 完整代码应用 1 邻接矩阵 A [ i ] [ j ] 1 A[i][j]1 A[i][j]1 表示顶点i与顶点j邻接&#xff0c;即i与j之间存在边或者弧。 A [ i ] [ j ] 0 A[i][j]0 A…