数学建模的思想
几道题目
余数的使用
余数运算对于加法、减法和乘法封闭,常用于循环队列等使用,也可以利用余数的性质大幅度简化编码
常用场合:递推法,倒推法
有很多经典的题目,比如猴子吃桃…
猜字母(待补…)
统计某种运算的结果末尾0的个数
统计因子中能被2和5整除的个数分别为n1,n2
r
e
s
u
l
t
=
m
i
n
(
n
1
,
n
2
)
result = min(n1,n2)
result=min(n1,n2)
毕达哥拉斯定理(勾股定理)
可以直接利用
x
2
+
y
2
=
z
2
x^2+y^2=z^2
x2+y2=z2在正整数域构造基础解系
{
x
=
2
k
+
1
y
=
2
k
2
+
2
k
z
=
2
k
2
+
2
k
+
1
k
=
1
,
2
,
3
,
.
.
.
\begin{cases}x=2k+1\\y=2k^2+2k\\ z = 2k^2+2k+1 \\ k = 1,2,3,... \end{cases}
⎩⎪⎪⎪⎨⎪⎪⎪⎧x=2k+1y=2k2+2kz=2k2+2k+1k=1,2,3,...
另一种解系:
{
x
=
s
t
y
=
t
2
−
s
2
2
z
=
t
2
+
s
2
2
s
=
1
,
3
,
5
,
7..
g
c
d
(
t
,
s
)
=
1
\begin{cases}x=st\\y=\frac{t^2-s^2}{2}\\ z =\frac{t^2+s^2}{2} \\ s =1,3,5,7.. \\ gcd(t,s)=1 \end{cases}
⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧x=sty=2t2−s2z=2t2+s2s=1,3,5,7..gcd(t,s)=1
超长位数的处理
-
存储方式:字符串、整数数组(甚至采用整型数组紧缩存放,即数组中一个元素存放多位,输出的时候使用printf("%nd",x[i]);
-
存储格式:把低位放在前,高位放在后面,符号位和小数位单独处理,可使用标志变量
-
运算方式
- C/C++使用数组模拟进行加减乘除,及时取余进位操作,小心溢出
- java 中里面提供了两个类BigInteger,BigDecimal分别对应大整数、高精度小数的处理 。
- tips:尽管是C/C++选手,假如遇到了大数运算的题目,又刚好是个填空题,不妨简单学下Java里面的这个两个类,甚至Date类(日期计算),求结果多快好省,何乐而不为?
两个往年题目练习一下BigInteger,BigDecimal的使用
RSA
对应2019省赛A组题目RSA解密
涉及的知识点如下
- 逆元
- 欧拉函数
- 快速幂
- 素数筛
- 扩展欧几里得算法
(待补…)