数论入门整理(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

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

MySQL-CRUD入门1

文章目录 认识配置文件client节点mysql节点mysqld节点 数据的添加(Create)添加一行数据添加多行数据两种添加数据的效率对比 数据的查询(Retrieve)全列查询指定列查询查询中带有表达式关于字面量关于as重命名 临时表引入distinct去重order by 排序关于NULL 认识配置文件 在我们的MySQL服务安装好了之后, 会有一个配置文件, 也就

数论ZOJ 2562

题意:给定一个数N,求小于等于N的所有数当中,约数最多的一个数,如果存在多个这样的数,输出其中最大的一个。 分析:反素数定义:对于任何正整数x,其约数的个数记做g(x).例如g(1)=1,g(6)=4.如果某个正整数x满足:对于任意i(0<i<x),都有g(i)<g(x),则称x为反素数。 性质一:一个反素数的质因子必然是从2开始连续的质数。 性质二:p=2^t1*3^t2*5^t3*7

POJ2247数论

p = 2^a*3^b*5^c*7^d 求形如上式的第n小的数。 import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.math.BigInteger;import java.u

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

C语言指针入门 《C语言非常道》

C语言指针入门 《C语言非常道》 作为一个程序员,我接触 C 语言有十年了。有的朋友让我推荐 C 语言的参考书,我不敢乱推荐,尤其是国内作者写的书,往往七拼八凑,漏洞百出。 但是,李忠老师的《C语言非常道》值得一读。对了,李老师有个官网,网址是: 李忠老师官网 最棒的是,有配套的教学视频,可以试看。 试看点这里 接下来言归正传,讲解指针。以下内容很多都参考了李忠老师的《C语言非

MySQL入门到精通

一、创建数据库 CREATE DATABASE 数据库名称; 如果数据库存在,则会提示报错。 二、选择数据库 USE 数据库名称; 三、创建数据表 CREATE TABLE 数据表名称; 四、MySQL数据类型 MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串类型 4.1 数值类型 数值类型 类型大小用途INT4Bytes整数值FLOAT4By