数论总结,(模版与题解)

news2025/6/8 19:32:59

数论

  • 欧拉函数
  • X质数(线性筛与二进制枚举)
  • 求解组合数
  • 欧拉降幂(乘积幂次)
  • 乘法逆元
  • 最小质因子之和
  • 模版

欧拉函数

欧拉函数的定义就是小于等于n的数里有f(n)个数与n互质,下面是求欧拉函数的模版。
在这里插入图片描述

package com.js.datastructure.recursion.蓝桥.总结.数论;

import java.util.Scanner;

public class 欧拉函数模版 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int n = scanner.nextInt();
        for (int i = 0; i < n; i++) {
            int x = scanner.nextInt();
            System.out.println(oula(x));
        }

    }

    static int oula(int x){
        int res = x;
        for (int i = 2; i <= x / i; i++) {
            if (x % i == 0) {
                res = res / i * (i - 1);
                while (x % i == 0) {
                    x /= i;
                }
            }
        }
        if(x > 1){
            res = res / x * (x-1);
        }
        return res;
    }
}

X质数(线性筛与二进制枚举)

在这里插入图片描述

package com.js.datastructure.recursion.蓝桥.总结.数论;

import java.util.ArrayList;

public class X质数 {
    public static void main(String[] args) {
        //线性筛把质数筛出来
        int[] minp = new int[1000001];
        ArrayList<Integer> prime = new ArrayList<>();
        boolean[] isp = new boolean[1000001];
        for (int i = 2; i <= 1000000; i++) {
            if(minp[i] == 0){
                prime.add(i);
            }
            for (int pp : prime){
                if(pp * i > 1000000){
                    break;
                }
                minp[i * pp] = pp;
                if(minp[i] == pp){
                    break;
                }
            }
        }

        for (int pp : prime){
            isp[pp] = true;
        }

        int ans = 0;
        //二进制遍历判断是否为质数
        for (int i = 1; i < 1000001; i++) {
            String s = i + "";
            int ls = s.length();
            for (int j = 1; j < Math.pow(2,ls); j++) {
                String er = Integer.toBinaryString(j);
                int ler = er.length();
                String dudu = "";
                for (int k = ler - 1; k >= 0; k--) {
                    if(er.charAt(k) == '1'){
                        dudu = s.charAt(k + ls -ler) + dudu;
                    }
                }
                int now = Integer.parseInt(dudu);
                if(isp[now]){
                    ans++;
                    break;
                }
            }
        }
        System.out.println(ans);
    }
}

求解组合数

在这里插入图片描述

package com.js.datastructure.recursion.蓝桥.总结.数论;

import java.util.Scanner;

public class 求解组合数 {
    static int mod = 1000000007;
    static long[] ni;
    static long[] jie;
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);


        //求阶乘
        jie = new long[10000001];
        jie[0] = 1;
        for (int i = 1; i < 10000001; i++) {
            jie[i] = (jie[i-1] * i) % mod;
        }

        //求逆元
        ni = new long[10000001];
        ni[0] = 1;
        for (int i = 1; i < 10000001; i++) {
            ni[i] = niyuan(jie[i]);
        }

        int q = scanner.nextInt();

        for (int i = 0; i < q; i++) {
            int n = scanner.nextInt();
            int m = scanner.nextInt();
            System.out.println((((jie[n] * ni[m]) % mod) * ni[n-m]) % mod);
        }
    }

    //快速乘法幂求逆元
    static long niyuan(long x){
        long res = 1;
        int y = mod - 2;
        while (y > 0){
            if((y & 1) == 1){
                res = (res * x) % mod;
            }
            y>>= 1;
            x = (x * x) % mod;
        }
        return res;
    }
}

欧拉降幂(乘积幂次)

在这里插入图片描述

package com.js.datastructure.recursion.蓝桥.总结.数论;

import java.util.Scanner;

public class 乘积幂次_欧拉降幂 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int n = scanner.nextInt();
        int m = scanner.nextInt();

        int mod = 1000000007;

        //求幂次
        long fm = 1;
        for (int i = 1; i <= m; i++) {
            fm = (fm * i) % (mod - 1);
        }

        //快速乘法幂
        long en = 1;
        int x = n;
        long y = fm;
        while (y > 0){
            if((y & 1) == 1){
                en = (en * x) % mod;
            }
            y >>= 1;
            x = (x * x) % mod;
        }

        System.out.println(en);
    }
}

乘法逆元

在这里插入图片描述

//package com.js.datastructure.recursion.蓝桥.总结.数论;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int t = scanner.nextInt();

        int mod = 1000000007;
        for (int i = 0; i < t; i++) {
            int n = scanner.nextInt();

            long x = n;
            int y = mod - 2;
            long res = 1;
            //快速乘法幂
            while (y > 0){
                if((y & 1) == 1){
                    res = (res * x) % mod;
                }
                y >>= 1;
                x = (x * x) % mod;
            }
            System.out.println(res);
        }
    }
}

最小质因子之和

在这里插入图片描述

模版

package com.js.datastructure.recursion.蓝桥.总结.数论;

import java.util.ArrayList;
import java.util.Scanner;

public class 最小质因子之和 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int[] minp = new int[20000001];
        ArrayList<Integer> Prime = new ArrayList<>();
        for (int i = 2; i < 20000001; i++) {
            if(minp[i] == 0){
                Prime.add(i);
                minp[i] = i;
            }
            for (int pp : Prime){
                if(pp * i > 20000000){
                    break;
                }
                minp[pp*i] = pp;
                if(minp[i] == pp){
                    break;
                }
            }
        }

        //求前缀和
        for (int i = 2; i < 20000001; i++) {
            minp[i] = minp[i-1] + minp[i];
        }
        int t = scanner.nextInt();

        for (int i = 0; i < t; i++) {
            int n = scanner.nextInt();
            System.out.println(minp[n]);
        }

    }
}

package com.js.datastructure.recursion.蓝桥.国特训练营.数论;

import java.util.ArrayList;

public class 模版 {
    static ArrayList<Integer> prime;
    static int[] minp;
    public static void main(String[] args) {

    }

    //快速乘法幂
    //有取余的时候都取余
    static long fast(int x, int y){
        long res = 1;
        while (y > 0){
            if((y & 1) == 1){
                res = res * x;
            }
            y>>=1;
            x = x * x;
        }
        return res;
    }



    //线性筛
    static void shai(){
        for (int i = 2; i < minp.length; i++) {
            if(minp[i] == 0){
                prime.add(i);
                minp[i] = i;
            }
            for (int pp : prime){
                if(pp * i >= minp.length){
                    break;
                }
                minp[pp*i] = pp;
                if(minp[i] == pp){
                    break;
                }
            }
        }
    }

    //欧拉函数:就是小于这个数和他互质数的个数,质数为n-1
    static int oula(int x){
        int res = x;
        for (int i = 2; i <= x / i; i++) {
            if(x % i == 0){
                res = res / i * (i-1);
                while (x % i == 0){
                    x/=i;
                }
            }
        }
        if(x > 1){
            res = res / x * (x-1);
        }
        return res;
    }

    //求逆元
    //模数为质数是,逆元为a^m-2 % m ,用快速乘法幂





    //大组合数
}

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

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

相关文章

EasyRTC嵌入式音视频通信SDK助力物联网/视频物联网音视频打造全场景应用

一、方案概述​ 随着物联网技术的飞速发展&#xff0c;视频物联网在各行业的应用日益广泛。实时音视频通信技术作为视频物联网的核心支撑&#xff0c;其性能直接影响着系统的交互体验和信息传递效率。EasyRTC作为一款成熟的音视频框架&#xff0c;具备低延迟、高画质、跨平台等…

1-2 Linux-虚拟机(2025.6.7学习篇- win版本)

1、虚拟机 学习Linux系统&#xff0c;就需要有一个可用的Linux系统。 如何获得&#xff1f;将自己的电脑重装系统为Linux&#xff1f; NoNo。这不现实&#xff0c;因为Linux系统并不适合日常办公使用。 我们需要借助虚拟机来获得可用的Linux系统环境进行学习。 借助虚拟化技术&…

Deepseek基座:Deepseek-v2核心内容解析

DeepSeek原创文章1 DeepSeek-v3&#xff1a;基于MLA的高效kv缓存压缩与位置编码优化技术 2 Deepseek基座&#xff1a;DeepSeek LLM核心内容解析 3 Deepseek基座&#xff1a;Deepseek MOE核心内容解析 4 Deepseek基座&#xff1a;Deepseek-v2核心内容解析 5Deepseek基座&#xf…

2025主流智能体Agent终极指南:Manus、OpenManus、MetaGPT、AutoGPT与CrewAI深度横评

当你的手机助手突然提醒"明天会议要带投影仪转接头"&#xff0c;或是电商客服自动生成售后方案时&#xff0c;背后都是**智能体(Agent)**在悄悄打工。这个AI界的"瑞士军刀"具备三大核心特征&#xff1a; 自主决策能力&#xff1a;像老司机一样根据路况实时…

家政小程序开发——AI+IoT技术融合,打造“智慧家政”新物种

基于用户历史订单&#xff08;如“每周一次保洁”&#xff09;、设备状态&#xff08;如智能门锁记录的清洁频率&#xff09;&#xff0c;自动生成服务计划。 结合天气数据&#xff08;如“雨天推荐玻璃清洁”&#xff09;&#xff0c;动态推送服务套餐。 IoT设备联动&#x…

Keil开发STM32生成hex文件/bin文件

生成hex文件生成bin文件 STM32工程的hex文件和bin文件都可以通过Keil直接配置生成 生成hex文件 工程中点击魔术棒&#xff0c;在 Output 中勾选 Create HEX File 选项&#xff0c;OK保存工程配置 编译工程通过后可以看到编译输出窗口有创建hex文件的提示 默认可以在Output文…

PDF 转 Markdown

本地可部署的模型 Marker Marker 快速准确地将文档转换为 markdown、JSON 和 HTML。 转换所有语言的 PDF、图像、PPTX、DOCX、XLSX、HTML、EPUB 文件在给定 JSON 架构 &#xff08;beta&#xff09; 的情况下进行结构化提取设置表格、表单、方程式、内联数学、链接、引用和代…

北大开源音频编辑模型PlayDiffusion,可实现音频局部编辑,比传统 AR 模型的效率高出 50 倍!

北大开源了一个音频编辑模型PlayDiffusion&#xff0c;可以实现类似图片修复(inpaint)的局部编辑功能 - 只需修改音频中的特定片段&#xff0c;而无需重新生成整段音频。此外&#xff0c;它还是一个高性能的 TTS 系统&#xff0c;比传统 AR 模型的效率高出 50 倍。 自回归 Tra…

蒲公英盒子连接问题debug

1、 现象描述 2、问题解决 上图为整体架构图&#xff0c;其中左边一套硬件设备是放在机房&#xff0c;右边是放在办公室。左边的局域网连接了可以访问外网的路由器&#xff0c;利用蒲公英作为旁路路由将局域网暴露在外网环境下。 我需要通过蒲公英作为旁路路由来进行远程访问&…

Unity | AmplifyShaderEditor插件基础(第五集:简易膨胀shader)

一、&#x1f44b;&#x1f3fb;前言 大家好&#xff0c;我是菌菌巧乐兹~本节内容主要讲一下&#xff0c;如何用shader来膨胀~ 效果预览&#xff1a; 二、&#x1f4a8;膨胀的基本原理 之前的移动是所有顶点朝着一个方向走&#xff0c;所以是移动 如果所有顶点照着自己的方…

WINUI——Magewell视频捕捉开发手记

背景 因需要融合视频&#xff0c;并加载患者CT中提取出的气管镜与病变&#xff0c;以便能实时查看气管镜是否在正确位置。 开发环境 硬件&#xff1a;Magewell的USB Capture HDMI Gen 2 IDE&#xff1a;VS2022 FrameWork: .Net6 WINUI Package: MVVMToolKit NLog Ma…

TDengine 开发指南——无模式写入

简介 在物联网应用中&#xff0c;为了实现自动化管理、业务分析和设备监控等多种功能&#xff0c;通常需要采集大量的数据项。然而&#xff0c;由于应用逻辑的版本升级和设备自身的硬件调整等原因&#xff0c;数据采集项可能会频繁发生变化。为了应对这种挑战&#xff0c;TDen…

第34次CCF-CSP认证真题解析(目标300分做法)

第34次CCF-CSP认证 矩阵重塑&#xff08;其一&#xff09;AC代码及解析矩阵重塑&#xff08;其二&#xff09;AC代码及解析货物调度AC代码及解析 矩阵重塑&#xff08;其一&#xff09; 输入输出及样例&#xff1a; AC代码及解析 1.线性化原矩阵 &#xff1a;由于cin的特性我们…

video-audio-extractor:视频转换为音频

软件介绍 前几天在网上看见有人分享了一个源码&#xff0c;大概就是py调用的ffmpeg来制作的。 这一次我带来源码版&#xff08;需要py环境才可以运行&#xff09;&#xff0c;开箱即用版本&#xff08;直接即可运行&#xff09; 软件特点 软件功能 视频提取音频&#xff1a…

[概率论基本概念4]什么是无偏估计

关键词&#xff1a;Unbiased Estimation 一、说明 对于无偏和有偏估计&#xff0c;需要了解其叙事背景&#xff0c;是指整体和抽样的关系&#xff0c;也就是说整体的叙事是从理论角度的&#xff0c;而估计器原理是从实践角度说事&#xff1b;为了表明概率理论&#xff08;不可…

PL/SQLDeveloper中数值类型字段查询后显示为科学计数法的处理方式

PL/SQLDeveloper中数值类型字段查询后显示为科学计数法的处理方式 文章目录 PL/SQLDeveloper中数值类型字段查询后显示为科学计数法的处理方式1. 查询效果2. 处理方式3. 再次查询 1. 查询效果 2. 处理方式 3. 再次查询

【vue】Uniapp 打包Android 文件选择上传问题详解~

需求 uniapp兼容android app&#xff0c;pc&#xff0c;h5的文件选择并上传功能。 需要支持拍照和相册选择&#xff0c;以及选择其他类型文件上传~ 实践过程和问题 开始使用uni-file-picker组件 以为很顺利&#xff0c;android模拟器测试…… 忽略了平台兼容性提示~&#…

Ctrl-Crash 助力交通安全:可控生成逼真车祸视频,防患于未然

视频扩散技术虽发展显著&#xff0c;但多数驾驶数据集事故事件少&#xff0c;难以生成逼真车祸图像&#xff0c;而提升交通安全又急需逼真可控的事故模拟。为此&#xff0c;论文提出可控车祸视频生成模型 Ctrl-Crash&#xff0c;它以边界框、碰撞类型、初始图像帧等为条件&…

网络编程之服务器模型与UDP编程

一、服务器模型 在网络通信中&#xff0c;通常要求一个服务器连接多个客户端 为了处理多个客户端的请求&#xff0c;通常有多种表现形式 1、循环服务器模型 一个服务器可以连接多个客户端&#xff0c;但同一时间只能连接并处理一个客户的请求 socket() 结构体 bind() listen() …

Transformer-BiLSTM、Transformer、CNN-BiLSTM、BiLSTM、CNN五模型时序预测

Transformer-BiLSTM、Transformer、CNN-BiLSTM、BiLSTM、CNN五模型时序预测 目录 Transformer-BiLSTM、Transformer、CNN-BiLSTM、BiLSTM、CNN五模型时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Transformer-BiLSTM、Transformer、CNN-BiLSTM、BiLSTM、CNN五…