Forgot password?
 Register account
View 2633|Reply 6

[数论] 编程解决一个不定方程

[Copy link]

50

Threads

402

Posts

2881

Credits

Credits
2881
QQ

Show all posts

zhcosin Posted 2018-3-16 13:00 |Read mode
Last edited by zhcosin 2018-3-16 13:14下面这个是数学解题之路公众号的题目
mmexport1521176048807.jpg

我数论是渣,不过嘛,这种题目倒是适合利用计算机来搞,编程如下(scheme语言)
1.png
3.png

最后来求解:
$x^2+y^2+z^2=2005$
2005.png
$x^2+y^2+z^2=2018$
2018.png

Rate

Number of participants 1威望 +1 Collapse Reason
realnumber + 1 不会scheme,还是好奇想看一眼,如下在哪? ...

View Rating Log

数学暗恋者,程序员,喜欢古典文学/历史,个人主页: https://zhcosin.coding.me/

770

Threads

4692

Posts

310K

Credits

Credits
35048

Show all posts

isee Posted 2018-3-16 14:25
回复 1# zhcosin
楼主如果有空,可以弄个 mathematica 来学习下

50

Threads

402

Posts

2881

Credits

Credits
2881
QQ

Show all posts

 Author| zhcosin Posted 2018-3-16 14:47
Last edited by zhcosin 2018-3-16 16:40回复 2# isee
不会 mathematica ,我喜欢 scheme 这样的语言,它的编程过程更能揭示计算的本质,是一种享受。
具体来说,如果用 java 这样的语言,这个问题远不用这么多代码,一个三重循环就搞定了,但是这里的代码却有个有趣的地方:
将求解方程$x^2+y^2=n(x\leqslant y)$作为求解方程$x^2+y^2+z^2=n(x \leqslant y \leqslant z)$的子问题,可以看到函数 solve-sqrx-add-sqry-add-sqrz-equal-n-iter 中并没有三重循环,而是先取定$x$的值为$a$,然后解方程$y^2+z^2=n-a^2 (y \leqslant z)$,但是限定$a\leqslant y$,将它的解与$x$的值一起构成方程$x^2+y^2+z^2=n$的解,这就是编程的模块化,如果用 java 的话,很可能为了求解二元的不定方程而重新写一个二重循环来搞定,这样就看不出求解二元方程与求解三元的方程这两个问题之间的子问题关系,换句话说,代码重用性不高。这就好比制作工具,可以先制作最简单的工具,然后用最简单的工具组合出一个稍微复杂一点的工具,再用这些复杂一点的工具组合出超级复杂的工具,而不是每次都从零开始,这就是编程的艺术

Rate

Number of participants 1威望 +1 Collapse Reason
realnumber + 1 鼓掌....,新手学习下

View Rating Log

126

Threads

430

Posts

3152

Credits

Credits
3152

Show all posts

TSC999 Posted 2018-3-16 22:06
用 mathematica 解答.png

以上是用 mathematica 软件解不定方程的。

209

Threads

950

Posts

6222

Credits

Credits
6222

Show all posts

敬畏数学 Posted 2018-3-17 09:49
上面看得我一头雾水啊。大神。。

84

Threads

2339

Posts

110K

Credits

Credits
13091

Show all posts

其妙 Posted 2018-3-19 18:51
上面看得我一头雾水啊。大神。。
敬畏数学 发表于 2018-3-17 09:49
同样一头雾水,
有没有不用枚举做的?
当然“轻度”枚举还是可以的

458

Threads

951

Posts

9832

Credits

Credits
9832

Show all posts

青青子衿 Posted 2019-4-17 16:25
回复 4# TSC999
{:time:}
  1. Solve[{a^2 + b^2 + c^2 == 2019 && 0 < a <= b <= c}, {a, b, c}, Integers]
Copy the Code
关于正整数的等幂和分解,MMA有更简洁的命令
  1. PowersRepresentations[2019, 3, 2]
Copy the Code

Mobile version|Discuz Math Forum

2025-5-31 10:46 GMT+8

Powered by Discuz!

× Quick Reply To Top Edit