分享丨最近在学习markdown的使用,还有数论,不管存在哪方面的问题都可以提哦,欢迎指导
1768
2024.05.01
2024.05.13
发布于 未知归属地
  1. 第一章 什么是数论

    1. 习题1.1
    2. 习题1.2
    3. 习题1.3
    4. 习题1.4
    5. 习题1.5
    6. 习题1.6
    7. 代码-矩阵快速幂
    8. 引申:
  2. 第二章 勾股数组

    1. 习题2.1
    2. 习题2.2
    3. 习题2.3
    4. 习题2.4
    5. 习题2.5
    6. 习题2.6
    7. 习题2.7
    8. 习题2.8
    9. 习题2.9
    10. 代码-本原勾股数组(简称PPT)
  3. 其他

第一章 什么是数论

习题1.1

​ 既是平方数又是三角数的前两个数是1与36,求下一个这样的数,如果可能的话,再求下一个。你能给出求三角平方数的有效方法么?你认为有无穷多个三角平方数吗?

解:

另外
必然分别是两个数的平方,即
不妨设 , 则有 , 可得
且有

也是一个三角平方数数对
其中是一个三角平方数数对,总能找到一个更小的数对 也是三角平方数。
而当.即每一个三角平方数都可以(1, 1)为起点通过迭代矩阵构造出来
可用矩阵快速幂求得第 n 个三角平方数

习题1.2

​ 试将前几个奇数加起来,观察所得到的数是否满足某些模式,一旦发现模式,将他表示成公式,给出你的公式成立的几何证明。

解:

猜想:

习题1.3

​ 连续的奇数 都是素数,存无穷多个这样的“素数三元组”吗?换句话说,存在无穷多个素数 使得 都是素数吗?

答:不存在
证:
,则 , 则有:

即 : 中必有一个数能被 ​整除

习题1.4

​ 尽管没有人保证,但是人们普遍认为有无穷多个素数形如

  • (a) 你认为存在无穷多个形如的素数吗?
  • (b) 你认为存在无穷多个形如的素数吗?
  • (c) 形如的数如何呢?形如的数又如何呢?
  • (d) 你认为 取哪些值时存在无穷多个形如的素数?

(a) ​ 不存在无穷多个形如N^2-1的素数

(b)

猜想:存在无穷多个形如​的素数

(c)

猜想:存在无穷多个形如的素数
​ 不存在无穷多个形如N^2-4的素数

(d) 答: 不是平方数

习题1.5

​ 通过重排和式中的项也可推导出前n个正整数和的公式,请补充推导细节

特别地,在第二行有多少个呢?

答: 为偶数时有 个,n为奇数时有 个且多出一个

习题1.6

​ 为以下结论填上易于判断的准则:

  • (a) M是三角数但且仅当________是一个奇平方数
  • (b) N是奇平方数但且仅当_________是一个三角数
  • (c) 证明(a),(b)中你所填的准则的正确性

(a) 答:
(b) 答:
(c) 证: 令

可得:对于任意一个整数n都分别对应一个奇平方数和一个三角数
引申:任意一个奇平方数N,N-1都可以被8整除

代码-矩阵快速幂

Java
/**
 * 矩阵乘法,未做不可乘校验
 * @return
 */
public int[][] mmul(int[][] x, int[][] y){
    int m = x.length;
    int n = x[0].length;
    int k = y.length;
    int[][] z = new int[m][n];
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            for (int l = 0; l < k; l++) {
                z[i][j] += x[i][l] * y[l][j];
            }
        }
    }
    return z;
}

/**
 * 矩阵快速幂
 * @param f0 初始矩阵
 * @param f  迭代矩阵
 * @param n  幂次
 * @return f0 * f ^ n
 */
public int[][] qmpow(int[][] f0, int[][] f, int n){
    while(n != 0){
        if((n & 1) == 1) f0 = mmul(f0, f);
        if(n > 1) f = mmul(f, f);
        n >>= 1;
    }
    return f0;
}

引申:

​ 我也来自己写个方程猜想一下。
​ 假设是方程的一组最小正整数解,即,那么方程的所有解都可以通过迭代矩阵来得到, 时,是该方程的第一组解(这很显然), 特别的如果方程的第一组解不满足,则方程没有正整数解.

时,是第一组解,当是第一组解

​ 假设是方程的一组解,令,则有:

这个迭代矩阵如何得到的呢,其实也很简单,用待定系数法就可以。

假定

由此我们可以得到:

显然​成为了最重要的条件.

补充:这方程叫佩尔方程,后面会学,可以用连分式来解。

第二章 勾股数组

习题2.1

​ (a) 我们证明了在任何本原勾股数组中,是偶数。用相同的论证方法证明必是3的倍数。

​ (b) 通过考察前面的本原勾股数组表,给出当​ 的倍数时的猜测。试证明你的猜测是正确的。

(a) 令 ​​​
​ 1. 当​​​, 得证
​ 2. 当​​
​ 2.1
​ 2.2
(b) 令

习题2.2

​ 非零整数 d 整除 m 是指对某个整数 k 满足 . 证明: 若 d 整除 m 与 n, 则 d 也整除 m - n 与 m + n.

证:

习题2.3

​ 对下述每个问题,从搜集数据开始,进而分析数据,形成猜想;最后设法证明你得猜想是正确的。
​ (a) 哪些奇数a可出现在本原勾股数组中?
​ (b) 哪些偶数b可出现在本原勾股数组中?
​ (c) 哪些奇数c可出现在本原勾股数组中?

(a) 答:所有大于1的奇数,令 , 则 a 可以取遍所有大于1的奇数
(b) 答:所有大于0且能被4整除的偶数,令 , 则 :

假设 ,则有
任取 , 则
(c) 答: c的质因数全部模4余1。质因数部分不证,困难级别。
, 则

习题2.4

​ 下面是两个本原勾股数组的例子:

​ 再找出至少一个新例子,使得两个本原勾股数组有相同的c值。你能找出有相同c值的三个本原勾股数组吗?你能找出多余三个且有相同c值的本原勾股数组吗?

答: 使用习题2.3中(c)的猜想。更一般的猜想: ,则c 的本原勾股数组数为,所以不存在恰好c值相同的三个本原勾股数组。

习题2.5

​ 在第1章中我们看到 n 个三角数 ​由公式

​ 给出.前四个三角数是. 在我们的勾股数组列表中有些 b 值是三角数的4倍,例如, .

  • (a) 求出 的本原勾股数组​.
  • (b) 你认为对每个三角数都存在的本原勾股数组吗?如果你确信这成立,则证明它,否则,找出使其不成立的三角数。

(a) 使用习题2.3 (b)中的结论。
(b) 使用习题2.3 (b)中的证明即可

习题2.6

​ 如果观察本章的本原勾股数组表,你会发现多个三元组满足 c 比 a 大 2.例如三元组都具有这种性质。

  • (a) 再求两个本原勾股数组 使得
  • (b) 求本原勾股数组使得
  • (c) 试求满足的通用公式

(a) (b) (c) : 使用习题 中的构造方法, 即

习题2.7

​ 对本章列表中的每个本原勾股数组, 计算, 这些值呈现某种特殊形式吗?试证明你的观察对所有本原勾股数组都成立。

答: 是偶平方数。

令t = 1, 则s - t可以取遍所有大于 0 的偶数

习题2.8

​ 设 m , n 为相差 2 的正整数, 将 写成最简分数。例如, .

  • (a) 计算接下去的三个例子。
  • (b) 考察(a) 中的分子和分母,与上一页上的勾股数组表对照。提出关于这些分数的一个猜想。
  • (c) 证明你的猜想是正确的。

(a)
(b) , 是本原勾股数组, 且:

(c) 证:







习题2.9

​ (a) 阅读关于巴比伦数系的材料并写出简短说明。要包括1 ~ 10 以及 20, 30, 40, 50的记号。
​ (b) 了解被称为Plimpton 322 号的巴比伦泥石板并写出简要说明, 要涉及他的形成年代。
​ (c) Plimpton 322 号的第二和第三列给出了一些整数对,他们满足是完全平方数。将其中的一些数对从巴比伦数转化为十进制数。并计算 b 的值使得为勾股数组

(a) 采用60进制。假如用 表示 , 表示 ,则有.话说60怎么表示?
(b) 略
(c)

代码-本原勾股数组(简称PPT)

Java
public List<int[]> ppt(int n) {
    List<int[]> ls = new ArrayList<>();
    for(int t = 1; t * t < n; t += 2){
        for(int s = t + 2; ;s += 2){
            int c = (s * s + t * t) / 2;
            if(c > n) break;
            if(!gcd(t, s)) continue;
            int a = s * t;
            int b = (s * s - t * t) / 2;
            ls.add(new int[]{a, b, c});
        }
    }
    return ls;
}
public boolean gcd(int x, int y){
    while(y > 0){
        int t = x % y;
        x = y;
        y = t;
    }
    return x == 1;
}

其他

  1. 数论概论第二部分
  2. 数论概论第三部分
  3. 数论概论第四部分
  4. 数论概论第五部分
  5. 数论概论第六部分
评论 (15)