数论入门整理(updating)

2024-09-09 16:38
文章标签 入门 整理 数论 updating

本文主要是介绍数论入门整理(updating),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、gcd lcm

基础中的基础,一般用来处理计算第一步什么的,分数化简之类。

LL gcd(LL a, LL b)  
{  return b ? gcd(b, a % b) : a;  
} 
<pre name="code" class="cpp">LL lcm(LL a, LL b)
{LL c = gcd(a, b);return a / c * b;
}
 

例题:

hrbust 1178

hdu 2028 Lowest Common Multiple Plus

二、exgcd

通常用于解二元一次方程,线性同余方程组,高次同余方程组(babystep_giantstep)。

中国剩余定理。

void exgcd(LL a, LL b, LL& d, LL& x, LL& y)//ax + by = d, d = gcd(a, b)  
{  if (b == 0)  {  d = a;  x = 1;  y = 0;  }  else  {  exgcd(b, a % b, d, y, x);  y -= x * (a / b);  }  
}  


例题:

二元一次方程:

poj 1061 + poj 2115 + poj 2142

uva 10673 Play with Floor and Ceil

线性同余方程组:

poj 2891 Strange Way to Express Integers

hdu 1573

高次同余方程组:

poj 3243 poj 2417 hdu 2815

中国剩余定理:

poj 1006 Biorhythms



三、素数

也是第一步的处理。


例题:

hdu 2098 分拆素数和

poj 2689 Prime Distance  大素数

poj 1811 + poj 2429 (Miller_Rabin大素数测试 + Pollard_Rho大合数分解)


四、快速幂

普通快速幂和矩阵快速幂。

用于求比较大的数的幂次取模。

比较大小可以取对数。

例题:

快速幂:

uva 10006 Carmichael Numbers 

poj 1995 


矩阵快速幂:

poj 3233(矩阵快速幂)

hdu 3292 No more tricks, Mr Nanguo(矩阵快速幂解佩尔方程)


五、欧拉函数

小于一个数x且与x互素的数的个数,就是欧拉函数,保存在phi[x]中。

1.打表:

void phi_table()  
{  for (int i = 2; i <= maxn; i++)  phi[i] = 0;  phi[1] = 1;  for (int i = 2; i <= maxn; i++)  {  if (!phi[i])  {  for (int j = i; j <= maxn; j += i)  {  if (!phi[j])  {  phi[j] = j;  }  phi[j] = phi[j] / i * (i - 1);  }  }  }  
}  
2.O(n)解法:

int euler_phi(int n)  
{  int m = sqrt(n + 0.5);  int res = n;  for (int i = 2; i <= m; i++)  {  if (n % i == 0)  {  res = res / i * (i - 1);  while (n % i == 0)  n /= i;  }  }  if (1 < n)  res = res / n * (n - 1);  return res;  
}  


例题:

基础:

uva 10820 poj 2407 poj 1284 poj 2478 poj 3090

进阶:

poj 3696 + poj 3358


六、因子相关

因子和,因子个数和,积性函数。


例题:

uva 10791 Minimum Sum LCM(拆分素因子)

poj 1845 (因子和)

poj 2992 (因子个数和)

hdu 1452 (积性函数+因子和+乘法逆元)

poj 2480 (积性函数+素因子和)


七、fib与catalan

catalan:

h(n) = (4 * n - 2) / (n + 1) * h(n - 1)

经典的总结:http://www.cnblogs.com/wuyuegb2312/p/3016878.html


例题:

hdu 1023 Train Problem II

uva 10303 uva 991


fib:

通常的fib直接打个表或者乱搞一下。

但是fib有个扩展就是fib的矩阵形式,在要求fib比较大的情况下,直接用矩阵快速幂搞定。

        100111110Sn1Fn1Fn2=SnFnFn1


例题:

uva 10229 (fib矩阵形式+矩阵快速幂)uva 10518 (fib(n)调用多少次)


八、概率论、组合数学

排列组合,贝叶斯公式、全概率公式。


例题:

uva 10105 uva 10910 uva 10943(排列组合C)

hdu 2048 and 2049(错排问题)

uva 19759 (Dp+概率)

uva 10900 (期望)

uva 10056(等比数列求和)

uva 11181(贝叶斯公式)

uva 10277 (概率论 + 暴力)

uva 10169 (概率+取小数点后0的位数)


九、java大数使用

uva 10183 uva 10519 uva 10516


十、数学问题+技巧

uva 10061 How many zero's and how many digits ?(不同进制阶乘末尾几个0)+poj 1401

uva 11121 Base -2 (负进制计算)

uva 128 Software CRC(进制转换)

uva 106 Fermat vs. Pythagoras(勾股数求法)

uva 11029 Leading and Trailing(求n^k的前几位和后几位 证明)

poj 1091 跳蚤(n元一次不定方程+斥容原理)

uva 11027(康拓展开求序列|编码解码)

uva 10491 (广义三门问题)

poj 1695 (莫比乌斯反演)


十一、组合数学学习

1.排列组合:

TypeSampleOrder Counts?Rep?Numbers of ways
无重组合从n个球中取r个NoNoC(n,r)
无重排列从n个人中找r个排队YesNoP(n,r)
可重组合从n种水果中选r个拼果篮NoYesC(n + r - 1, r)
可重排列n个字母组成的r位串YesYesn ^ r
多重全排列r1个a,r2个b组成的n位串YesYesn! / (r1! r2!)



这篇关于数论入门整理(updating)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1151700

相关文章

Java方法重载与重写之同名方法的双面魔法(最新整理)

《Java方法重载与重写之同名方法的双面魔法(最新整理)》文章介绍了Java中的方法重载Overloading和方法重写Overriding的区别联系,方法重载是指在同一个类中,允许存在多个方法名相同... 目录Java方法重载与重写:同名方法的双面魔法方法重载(Overloading):同门师兄弟的不同绝

SpringCloud Stream 快速入门实例教程

《SpringCloudStream快速入门实例教程》本文介绍了SpringCloudStream(SCS)组件在分布式系统中的作用,以及如何集成到SpringBoot项目中,通过SCS,可... 目录1.SCS 组件的出现的背景和作用2.SCS 集成srping Boot项目3.Yml 配置4.Sprin

SpringMVC配置、映射与参数处理​入门案例详解

《SpringMVC配置、映射与参数处理​入门案例详解》文章介绍了SpringMVC框架的基本概念和使用方法,包括如何配置和编写Controller、设置请求映射规则、使用RestFul风格、获取请求... 目录1.SpringMVC概述2.入门案例①导入相关依赖②配置web.XML③配置SpringMVC

MySQL索引踩坑合集从入门到精通

《MySQL索引踩坑合集从入门到精通》本文详细介绍了MySQL索引的使用,包括索引的类型、创建、使用、优化技巧及最佳实践,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录mysql索引完整教程:从入门到入土(附实战踩坑指南)一、索引是什么?为什么需要它?1.1 什么

Java Lettuce 客户端入门到生产的实现步骤

《JavaLettuce客户端入门到生产的实现步骤》本文主要介绍了JavaLettuce客户端入门到生产的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录1 安装依赖MavenGradle2 最小化连接示例3 核心特性速览4 生产环境配置建议5 常见问题

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

Java List 使用举例(从入门到精通)

《JavaList使用举例(从入门到精通)》本文系统讲解JavaList,涵盖基础概念、核心特性、常用实现(如ArrayList、LinkedList)及性能对比,介绍创建、操作、遍历方法,结合实... 目录一、List 基础概念1.1 什么是 List?1.2 List 的核心特性1.3 List 家族成

MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)

《MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)》本文给大家介绍MyBatis的xml中字符串类型判空与非字符串类型判空处理方式,本文给大家介绍的非常详细,对大家的学习或... 目录完整 Hutool 写法版本对比优化为什么status变成Long?为什么 price 没事?怎

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c

史上最全MybatisPlus从入门到精通

《史上最全MybatisPlus从入门到精通》MyBatis-Plus是MyBatis增强工具,简化开发并提升效率,支持自动映射表名/字段与实体类,提供条件构造器、多种查询方式(等值/范围/模糊/分页... 目录1.简介2.基础篇2.1.通用mapper接口操作2.2.通用service接口操作3.进阶篇3