算法比赛中常用的数学知识

一、求某个整数的正约数个数与正约数之和

1.1求某个正整数N的正约数个数 
public class Main {public static void main(String[] args) {System.out.println(count(360));//结果为24}public static long count(long number){long count=1;for(long i=2;i<=Math.sqrt(number);i++){long n=0;while (number%i==0){number=number/i;n++;}if(n>0){count=count*(n+1);}}if(number>1){count=count*2; //处理的是1次幂的情况,因为(1+1)=2;}return count;}
}
 1.2求某个正整数N的正约数之和 
public class Main {public static void main(String[] args) {System.out.println(count(360));}public static long count(long number) {long sum = 1;for (long i = 2; i <= Math.sqrt(number); i++) {long exponent = 0;while (number % i == 0) {number /= i;exponent++;}if (exponent > 0) {// 正确使用等比数列求和公式计算某个质因数对应的约数和long termSum = (long) ((Math.pow(i, exponent + 1) - 1) / (i - 1));// 累乘不同质因数对应的约数和sum *= termSum;}}//处理指数为1的情况,因为number的1次方是number,0次方是1if (number > 1) {sum *= (number + 1);}return sum;}
}

二、求最大公约数

public static long gcd(long a,long b) {while(b!=0) {long temp=b;b=a%b;a=temp;}return a;}

三、分解质因数

 public static void ps(int n) {List<Integer> list=new ArrayList<>();for(int i=2;i<=Math.sqrt(n);i++) {while(n%i==0) {list.add(i);  //找到一个质因数n=n/i;  //更新待分解的数}}if(n>1) {list.add(n); //如果最后余数大于1,则说明它本身也是质数}
}

四、快速幂

import java.util.Scanner;public class a {public static void main(String[] args) {Scanner scan=new Scanner(System.in);long b=scan.nextInt();long p=scan.nextInt();long k=scan.nextInt();System.out.println(quickmi(b,p,k));}public static long quickmi(long b,long p,long k){long res=1;while(p>0){if((p&1)==1){res=res*b%k;}b=b*b%k;p=p>>1;}return res;}}

 五、费马小定理

乘法逆元的定义

 

import java.util.Scanner;public class a {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int n = scan.nextInt();while (n-- > 0) {long b=scan.nextLong();long p=1000000007-2;long k=1000000007;System.out.println(quickmi(b,p,k));}}public static long quickmi(long b,long p,long k){long res=1;while(p>0){if((p&1)==1){res=res*b%k;}b=b*b%k;p=p>>1;}return res;}}

五,求组合数问题(注意看数据范围,不同范围不同求法)

 


import java.util.Scanner;public class Main {static long[] arr=new long[16];public static void main(String[] args) {Scanner scan=new Scanner(System.in);int q=scan.nextInt();arr[0]=1;arr[1]=1;for(int i=2;i<16;i++) {arr[i]=i*arr[i-1];}while(q-->0) {int n=scan.nextInt();int m=scan.nextInt();System.out.println(jiec(n,m));}}public static long jiec(int n,int m) {long ans=arr[n]/(arr[m]*arr[n-m]);return ans;}}    
用快速幂加费马小定理

import java.util.Scanner;public class Main {static long N=1000000007;static long[] arr;public static void main(String[] args) {Scanner scan=new Scanner(System.in);int a=scan.nextInt();int b=scan.nextInt();arr=new long[3001];arr[0]=1;for(int i=1;i<3001;i++){arr[i]=arr[i-1]*i%N;}System.out.println(jisuan(a,b));}//快速幂,a的b次方public static long quickmi(long a,long b){long ans=1;while(b>0){if((b&1)==1){ans=ans*a%N;}a=a*a%N;b=b>>1;}return ans;}//计算组合数public static long jisuan(int a,int b){long fenmu=arr[b]*arr[a-b]%N;//费马小定理long sum=quickmi(fenmu,N-2);long ans=arr[a]*sum%N;return ans;}
}

六、素数筛


import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;public class a {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int n = scan.nextInt();boolean[] prime = new boolean[n + 1]; //标记是否为素数for (int i = 2; i <= n; i++) {prime[i] = true;}List<Integer> list = new ArrayList<>();  //存素数for (int i = 2; i <= n; i++) {if (prime[i]) {list.add(i);}for (int j = 0; j < list.size() && i * list.get(j) <= n; j++) {//i * list.get(j) <= n这个条件是为了防止数组越界prime[i * list.get(j)] = false;if (i % list.get(j) == 0) {break;}}}System.out.println(list.size());}}

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

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

相关文章

虚拟Ubuntu系统 开机提示:SMBus Host controller not enabled 后正常启动,去除这个提示提升开机速度。

如题&#xff0c;虚拟机中的Ubuntu系统开机提示&#xff1a;SMBus Host controller not enabled&#xff0c;虽然能正常启动&#xff0c;但不仅影响开机速度&#xff0c;而且还膈应人。 使用命令查看模块 lsmod | grep piix4 发现i2c_piix4有问题&#xff0c; 禁止 i2c_piix4…

NLP基础知识 与 词向量的转化方法 发展

目录 1.NLP 基础知识点 为什么需要自然语言处理? 自然语言处理有哪些分类? 自然语言处理有哪些实际应用? 为什么需要自然语言处理? 自然语言处理有哪些分类? 自然语言处理有哪些实际应用? 自然语言处理的技术/工作原理是什么? 2.NLP文本转化为词向量的方法 2…

【FPGA基础学习】状态机思想实现流水灯

目录 一、用状态机实现LED流水灯1.状态机思想简介1. 1基本概念1.2.核心要素1.3分类与模型 2.LED流水灯 二、CPLD与FPGA1.技术区别2.应用场景3.设计选择建议 三、HDLbits组合逻辑题目 一、用状态机实现LED流水灯 1.状态机思想简介 1. 1基本概念 ​ 状态机&#xff08;Finite …

CSS语言的游戏AI

CSS语言的游戏AI探讨 随着技术的飞速发展&#xff0c;游戏行业也在不断地革命和演变。游戏中的人工智能&#xff08;AI&#xff09;作为一种重要的设计元素&#xff0c;其复杂性和智能程度对游戏的体验、玩法和整体表现都有着深远的影响。近年来&#xff0c;CSS&#xff08;Ca…

docker配置redis容器时配置文件docker-compose.yml示例

1.配置数据节点&#xff08;主从节点&#xff09; version: 3.7 services:master:image: redis:5.0.9container_name: redis-masterrestart: alwayscommand: redis-server --appendonly yesports:- 6379:6379slave1:image: redis:5.0.9container_name: redis-slave1restart: a…

【WPF】IOC控制反转的应用:弹窗但不互相调用ViewModel

全称&#xff1a;Inversion of Control&#xff0c;控制反转 场景&#xff1a;A页面需要调用B/C页面等&#xff0c;防止直接在VM中新建别的页面实例&#xff0c;使用IOC设计架构&#xff1b; 创建Service&#xff0c;在Service中实现页面的实例创建和定义页面输入输出参数。 在…

MySQL学习笔记十五

第十七章组合查询 17.1组合查询 MySQL允许执行多个查询&#xff08;多条SELECT语句&#xff09;&#xff0c;并将结果作为单个查询结果集返回。这些组合查询通常称为并&#xff08;union&#xff09;或复合查询&#xff08;compound query&#xff09;。 以下几种情况需要使…

【MySQL】安装

下载 MySQL :: MySQL Downloads 安装 mysql 验证

ffpyplayer+Qt,制作一个视频播放器

ffpyplayerQt&#xff0c;制作一个视频播放器 项目地址FFmpegMediaPlayerVideoWidget 项目地址 https://gitee.com/chiyaun/QtFFMediaPlayer FFmpegMediaPlayer 按照 QMediaPlayer的方法重写一个ffpyplayer # coding:utf-8 import logging from typing import Unionfrom PySide…

Spring Boot 国际化配置项详解

Spring Boot 国际化配置项详解 1. 核心配置项分类 将配置项分为以下类别&#xff0c;便于快速定位&#xff1a; 1.1 消息源配置&#xff08;MessageSource 相关&#xff09; 控制属性文件的加载、编码、缓存等行为。 配置项作用默认值示例说明spring.messages.basename指定属…

拍摄的婚庆视频有些DAT的视频文件打不开怎么办

3-12 现在的婚庆公司大多提供结婚的拍摄服务&#xff0c;或者有一些第三方公司做这方面业务&#xff0c;对于视频拍摄来说&#xff0c;有时候会遇到这样一种问题&#xff0c;就是拍摄下来的视频文件&#xff0c;然后会有一两个视频文件是损坏的&#xff0c;播放不了&#xff0…

【力扣hot100题】(073)数组中的第K个最大元素

花了两天时间搞明白答案的快速排序和堆排序。 两种都写了一遍&#xff0c;感觉堆排序更简单很多。 两种都记录一下&#xff0c;包括具体方法和易错点。 快速排序 class Solution { public:vector<int> nums;int quicksort(int left,int right,int k){if(leftright) r…

【亲测】Linux 使用 Matplotlib 显示中文

文章目录 安装中文字体在Matplotlib中使用该字体来显示中文 在 Linux 系统中使用 Matplotlib 绘制图表时&#xff0c;如果需要显示中文&#xff0c;可能会遇到中文字符显示为方块或者乱码的问题。这是因为Matplotlib 默认使用的字体不支持中文。本文手把手带你解决这个问题。 …

Redis Java 客户端 之 SpringDataRedis

SpringDataRedis SpringData是Spring中数据操作的模块&#xff0c;包含对各种数据库的集成&#xff0c;其中对Redis集成模块就叫做SpringDataRedis&#xff0c; 官方地址&#xff1a;https://spring.io/projects/spring-data-redis 特性&#xff1a; 提供了对不同Redis客户端…

数字化转型:重构生存逻辑,不止系统升级

数字化转型不过是升级系统&#xff0c;砸了钱、耗了力&#xff0c;却没达到预期&#xff0c;竞争力也没提升。实际上&#xff0c;数字化转型是对企业生存逻辑的彻~底重构&#xff0c;关乎商业模式、运营流程等方方面面。​ 很多企业觉得数字化转型是 IT 部门的事&#xff0c;只…

C语言队列的实现

目录 ​编辑 &#xff08;一&#xff09;队列的定义,初始化及创建结点 &#xff08;二&#xff09;入队和出队&#xff0c;以及取队头队尾的数据 (三)销毁队列 队列是指只允许在一端进行插入数据操作&#xff0c;在另⼀端进行删除数据操作的特殊线性表&#xff0c;队列具有先…

mapbox进阶,使用本地dem数据,加载hillshade山体阴影图层

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️hillshade 山体阴影图层 api1.3.1 ☘️…

量子纠错码实战:从Shor码到表面码

引言&#xff1a;量子纠错的必要性 量子比特的脆弱性导致其易受退相干和噪声影响&#xff0c;单量子门错误率通常在10⁻~10⁻量级。量子纠错码&#xff08;QEC&#xff09;通过冗余编码测量校正的机制&#xff0c;将逻辑量子比特的错误率降低到可容忍水平。本文从首个量子纠错…

10. git switch

基本概述 git switch是 Git 2.23 版本之后新增的命令&#xff0c;专门用于切换分支&#xff0c;目的是替代 git checkout 中与分支操作相关的功能&#xff0c;使命令语义更清晰、更安全。 基本用法 1.切换到已有分支 git switch <branch-name>常用选项 1.从当前分支…

LeetCode 热题 100 堆

215. 数组中的第K个最大元素 给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 **k** 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 …