NEFU离散数学实验4-数论

news2024/11/17 1:44:24

相关概念

离散数学中的数论相关概念和公式如下:

1.最大公约数(GCD):两个整数a和b的最大公约数是能够同时整除a和b的最大正整数,记作GCD(a, b)。

2.最小公倍数(LCM):两个整数a和b的最小公倍数是能够同时整除a和b的最小正整数,记作LCM(a, b)。

3.欧几里得算法(Euclidean algorithm):一种求最大公约数的算法,它基于这样一个事实:对于任意两个正整数a和b,有GCD(a,b) = GCD(b,a mod b)(其中mod表示取模运算),而且GCD(a, 0) = a。

4.素数(prime number):一个大于1的正整数,其正因子只有1和它本身,即只能被1和它本身整除。

5.素数定理(Prime number theorem):一个以n为上限的正整数中,素数的个数约为n/ln(n)。

6.费马小定理(Fermat's little theorem):如果p是素数,a是不是p的倍数的整数,则a^(p-1) ≡ 1 (mod p)。

7.欧拉定理(Euler's theorem):如果a和n是正整数且互质,则a^φ(n) ≡ 1 (mod n),其中φ(n)表示小于等于n且和n互质的正整数的个数。

8.欧拉函数(Euler's totient function):φ(n)表示小于等于n且和n互质的正整数的个数,例如φ(10) = 4,因为1, 3, 7, 9都和10互质。

9.扩展欧几里得算法(Extended Euclidean algorithm):一种求解ax + by = GCD(a,b)的一组整数解x和y的算法。

10.中国剩余定理(Chinese remainder theorem):一种求解同余方程组的算法,它可以方便地求解形如x ≡ a1 (mod m1), x ≡ a2 (mod m2),… , x ≡ ak (mod mk)的同余方程组。

11.欧拉降幂定理(Euler's reduced power theorem):如果a和n是正整数且互质,则对于任意的整数b,有a^b ≡ a^(b mod φ(n) + φ(n)) (mod n)。

1. (程序题)同余方程升级版

求关于 x的同余方程 ax≡c(mod b) 的最小正整数解。

Input

一行,包含两个正整数 a,b,c用一个空格隔开。

Output

一个正整数 x ,即最小正整数解。输入数据保证一定有解。

Sample Input

3 10 1

Sample Output

7

下面给出了ex_gcd函数:

void Ex_gcd(int a, int b, int &x, int &y,int &d)

{

    if(b == 0)//递归出口

    {x = 1;y = 0;d=a;return;}

    Ex_gcd(b, a%b, x, y,d);

    int t;

    t=x;

    x =y;

    y = t-(a/b)*y;

}

d: 最大公约数;x是解

#include <iostream> 

using namespace std; 

void Ex_gcd(int a, int b, int &x, int &y, int &d)
{
    // 求最大公约数和扩展欧几里德算法
    if (b == 0) // 如果b等于0,说明a就是最大公约数,同时x=1,y=0
    {
        x = 1;
        y = 0;
        d = a;
        return;
    }
    Ex_gcd(b, a % b, x, y, d); // 递归调用,求解最大公约数和x、y的值
    int t = x; // 保存x的值
    x = y; // 更新x的值为上一次递归中的y
    y = t - (a / b) * y; // 更新y的值为上一次递归中的x减去(a/b)乘以上一次递归中的y
}

int main()
{
    int a, b, c;
    cin >> a >> b >> c; 

    int x, y, d;
    Ex_gcd(a, b, x, y, d); // 求解最大公约数和x、y的值

    int ans = (c / d) * x % (b / d); // 求解方程的解

    if (ans < 0)
        ans += b / d; // 如果ans小于0,加上b/d
   /**
     在求解方程的解时,可能会得到一个负数的解。根据数学的定义,对于模运算,负数的结果应该是在模数 
     的范围内的正数。所以,如果ans小于0,就需要加上b/d,使得ans变为一个在模数范围内的正数。这样 
     可以保证最终得到的解是正确的。

    */
    cout << ans << endl; 

    return 0;
}

2. (程序题)高木同学的因子

今天西片同学又被高木同学捉弄了,高木同学跟西片同学玩了这么一个游戏。两人心中分别想一个数字,这两个数字分别为x和y(1<=x,y<=1e18),然后让西片同学说出一共有多少个整数既是x的因子,又是y的因子。由于西片和高木很有默契,所以保证他们两个想的数x和y的最大公因数不会超过1e9。这个问题又难住了西片同学了,你能帮帮西片同学告诉他答案吗?

Input

单组输入

数据占一行,包含两个整数x和y(1<=x,y<=1e18),保证gcd(x,y)<=1e9。

Output

输出既是x因子又是y因子的整数的个数。输出占一行

Sample Input

12 36

Sample Output

6

Hint

12和36有共同因子1 2 3 4 6 12共计6个数字,所以答案为6

#include <iostream> 
#include <algorithm> 
#include <cmath>

using namespace std; 

typedef long long ll; 

ll gcd(ll a, ll b) {
    // 求最大公约数的函数
    if (b == 0) {
        return a; // 如果b等于0,返回a作为最大公约数
    }
    return gcd(b, a % b); // 递归调用,求解最大公约数
}

int main() {
    ll x, y;
    cin >> x >> y; 

    ll data = gcd(x, y); // 求解x和y的最大公约数
    ll count = 0; // 初始化计数器为0
    for (ll i = 1; i * i <= data; i++) {
        // 从1开始遍历到data,每次增加1
        // 如果i的平方小于等于data,则继续循环
        // 否则跳出循环
        if (data % i == 0) {
            // 如果data能被i整除,说明i和data/i都是data的因数
            // 因此计数器增加2
            count += 2;
        }
    }
    if ((ll)(sqrt(data)) * (ll)(sqrt(data)) == data) {
        // 如果data的平方根的平方等于data,说明data是一个完全平方数
        // 也就是说data有一个因数只出现一次,因此计数器减去1
        count--;
    }

    cout << count << endl; 

    return 0;
}

 3. (程序题)费马小定理

给定3个正整数a,b,c,求a^(b^c) % 1000000007 (10^9 + 7)的值。

Input

多组输入,每组第一行3个数a,b,c,数据范围都在10^9以内。

Output

输出结果。

Sample Input

2 2 3 

5 5 6

Sample Output

256

516190328

---------------------------------------------------------

typedef long long ll;

const int mod=1e9+7;

ll quick_mod(ll a,ll b,ll c)

{

    ll ans=1;

    while(b){

        if(b&1){

            ans=ans*a%c;

            b--;

        }

        b>>=1;

        a=a*a%c;

    }

    return ans;

}

#include <iostream>

using namespace std;

typedef long long ll;

const int mod = 1e9 + 7;

ll quick_mod(ll a, ll b, ll c)
{
    ll ans = 1; // 初始化ans为1,表示初始结果为1
    while (b) // 当指数b不为0时,进行循环
    {
        if (b & 1) // 如果b的最低位为1
        {
            ans = ans * a % c; // 将ans乘以a并取模c,得到新的ans
            b--; // 将b减1
        }
        b >>= 1; // 将b右移1位,相当于将b除以2
        a = a * a % c; // 将a平方并取模c,得到新的a
    }
    return ans; // 返回计算结果ans
}

int main()
{
    ll a, b, c;
    while (cin >> a >> b >> c)
    {
        ll ans = quick_mod(a, quick_mod(b, c, mod - 1), mod);
        cout << ans << endl;
    }
    return 0;
}

上述代码实现了计算a^(b^c) % mod的功能,并结合费马小定理进行了优化。

  • 首先,定义了一个长整型别名ll,用于表示较大的整数。
  • 然后,定义了一个常量mod,表示取模的值,即对10^9 + 7取模。
  • 接着,定义了一个函数quick_mod,用于快速计算幂的结果。
  • 在主函数中,通过循环读入a、b、c的值,并调用quick_mod函数计算a^(b^c) % mod的结果,并输出结果。

费马小定理的优化主要体现在对指数b^c的计算上。根据费马小定理,a^(p-1) ≡ 1 (mod p),其中p为质数。因此,对于指数b^c,可以通过对mod-1取模,将指数缩小到mod-1的范围内,从而加快计算速度。在代码中,调用quick_mod函数时,将b^c对mod-1取模,得到新的指数,然后再计算a的该指数次幂。这样可以避免对较大的指数进行计算,提高了算法的效率。

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

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

相关文章

MySQL-Galera-Cluster集群详细介绍

目录 一、什么是Mysql集群&#xff1f;1.单节点mysql存在的常见问题2.mysql集群介绍3.Mysql集群的优点和风险 二、Mysql集群的一些疑问1.mysql的AB复制和Galera Cluster有什么区别&#xff1f;2.什么情况下适用AB复制&#xff0c;什么情况下使用Galera cluster&#xff1f;3.可…

给出n个字母(a-z),找出出现次数最多的字母并输出。(附ASCII码表)

Result01&#xff1a; 两层for循环枚举&#xff0c;时间复杂度为O(N2)&#xff0c;空间复杂度O(1)。 //暴力解&#xff1a;public static char Result01(char[] chars) {int maxNums 0;//保存最大出现次数int index 0;//记录出现次数最多的元素在数组中的下标for (int i …

初识【Java类和对象】

目录 1.面向对象的初步认知 1.1什么是面向对象? 1.2面向对象与面向过程 2.类定义和使用 2.1简单认识类 2.2类的定义格式 3.类的实例化 3.1什么是实例化 3.2类和对象的说明 4.this引用 4.1为什么要有this的引用 4.2什么是this引用 4.3this引用的特性 &#x1…

3 — NLP 中的标记化:分解文本数据的艺术

一、说明 这是一个系列文章的第三篇文章&#xff0c; 文章前半部分分别是&#xff1a; 1 — NLP 的文本预处理技术2 — NLP中的词干提取和词形还原&#xff1a;文本预处理技术 在本文中&#xff0c;我们将介绍标记化主题。在开始之前&#xff0c;我建议您阅读我之前介绍…

【机器学习合集】模型设计之注意力机制动态网络 ->(个人学习记录笔记)

文章目录 注意力机制1. 注意力机制及其应用1.1 注意力机制的定义1.2 注意力机制的典型应用 2. 注意力模型设计2.1 空间注意力机制2.2 空间注意力模型2.3 通道注意力机制2.4 空间与通道注意力机制2.5 自注意力机制2.5 级联attention 动态网络1. 动态网络的定义2. 基于丢弃策略的…

高校教务系统登录页面JS分析——西安电子科技大学

高校教务系统密码加密逻辑及JS逆向 本文将介绍西安电子科技大学高校教务系统的密码加密逻辑以及使用JavaScript进行逆向分析的过程。通过本文&#xff0c;你将了解到密码加密的基本概念、常用加密算法以及如何通过逆向分析来破解密码。 &#x1f31f;PS&#xff1a;我还以为和…

Linux服务器使用GPU技巧

进行深度学习实验的时候用pytorch-gpu&#xff0c;经常要与GPU打交道&#xff1b; 所以经常遇到奇奇怪怪的问题&#xff1b; 查看GPU占用情况 watch -n 10 nvidia-smi 使用技巧 torch.nn.DataParallel() CLASStorch.nn.DataParallel(module, device_idsNone, output_devic…

部署Kubernetes(k8s)多主的高可用集群

文章目录 文档说明网络拓扑IP地址规划 安装步骤环境准备关闭防火墙关闭SELinux关闭Swap分区修改主机名称解析设置主机名称转发 IPv4 并让 iptables 看到桥接流量升级操作系统内核导入elrepo gpg key安装elrepo YUM源仓库安装kernel-lt版本设置grub2默认引导为0重新生成grub2引导…

关于CSS的几种字体悬浮的设置方法

关于CSS的几种字体悬浮的设置方法 1. 鼠标放上动态的2. 静态的&#xff08;位置看上悬浮&#xff09;2.1 参考QQ邮箱2.2 参考知乎 1. 鼠标放上动态的 效果如下&#xff1a; 代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><met…

使用复合机器人有哪些注意事项

随着科技的快速发展&#xff0c;复合机器人在各个领域得到了广泛应用。复合机器人可以完成多种任务&#xff0c;具备高效、精准、灵活等优势。然而&#xff0c;在使用复合机器人时&#xff0c;我们也需要注意一些事项&#xff0c;以确保安全和有效地使用这些机器人。 一、安装要…

OpenCV - C++实战(05) — 颜色检测

目录 第5章 颜色检测 5.1 实现原理 5.2 Lab颜色模型 5.3 cv :: threshold() 阈值函数 5.4 计算图像之间的距离 5.4.1 公式计算 5.4.2 cv::absdiff() 5.4.3 cv::floodFill() 5.5 完整代码 Github代码地址&#xff1a;GitHub - Qinong/OpenCV 第5章 颜色检测 颜色检测…

腾讯云轻量级服务器哪个镜像比较好?

腾讯云轻量应用服务器镜像是什么&#xff1f;镜像就是操作系统&#xff0c;轻量服务器镜像系统怎么选择&#xff1f;如果是用来搭建网站腾讯云百科txybk.com建议选择选择宝塔Linux面板腾讯云专享版&#xff0c;镜像系统根据实际使用来选择&#xff0c;腾讯云百科来详细说下腾讯…

Express框架开发接口之实现分页功能

1、是什么&#xff1f; 在我们做数据查询的时候&#xff0c;如果数据量很大&#xff0c;比如几万条数据&#xff0c;放在一个页面显示的话显然不友好&#xff0c;这时候就需要采用分页显示的形式&#xff0c;如每次只显示10条数据 要实现分页功能&#xff0c;实际上就是从结…

代码随想录Day33 LeetCode T62不同路径 LeetCode T63 不同路径II

前言 动规五部曲 1.确定dp数组含义 2.确定递推公式 3.初始化数组 4.确定遍历方式 5.打印dp数组查看分析问题 LeetCode T62 不同路径 题目链接:62. 不同路径 - 力扣&#xff08;LeetCode&#xff09; 题目思路: 注:n行m列而不是m行n列 1.确定dp数组含义 代表到达此下标有多少条…

云尘-AI-Web-1.0

继续&#xff01; 开扫 继续先测试web sql注入 直接sqlmap跑 通过注入 &#xff08;sqlmap查询方式省略&#xff09; 存在systemuser 不知道会不会是电脑的密码 我们解密一下然后直接试试看 然后失败 这里就没有思路了 但是我们刚刚存在一个目录 我们再扫扫看 无果 换另一个…

C# Onnx DBNet 检测条形码

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Numerics; using System.Runtime.InteropServices.…

【广州华锐互动】风景区规划VR虚拟现实教学系统

风景区规划VR虚拟现实教学系统是一种新兴的教学工具&#xff0c;它可以通过虚拟现实技术&#xff0c;为学生提供一种沉浸式的、实时的、全方位的景区规划体验。 在风景区规划VR虚拟现实教学系统中&#xff0c;学生可以通过虚拟现实技术&#xff0c;实时地与景区进行交互。他们可…

人大金仓助力中国人民银行征信中心业务系统异地容灾优化升级

日前&#xff0c;人大金仓助力中国人民银行应收账款融资服务平台异地容灾项目顺利上线&#xff0c;保证了平台系统运行的连续性和数据安全&#xff0c;为充分发挥平台的融资功能&#xff0c;缓解中小微企业融资难提供了强有力的保障。 缓解中小微企业融资难 中国人民银行构于2…

「Qt中文教程指南」如何创建基于Qt Widget的应用程序(四)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 本文描述了如何使用…

【音视频 | wav】wav音频文件格式详解——包含RIFF规范、完整的各个块解析、PCM转wav代码

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…