标题:笔算开平方转化成vfp程序
取消只看楼主
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
结帖率:100%
 问题点数:0 回复次数:14 
笔算开平方转化成vfp程序
今天给一个当家的中学生讲解了笔算开平方,初中都接触了\((a+b)^2=a^2+2ab+b^2\),  假设ab表示一个广义2位数,b代表个位数,a代表十位数,则ab=10a+b,然后\((10a+b)^2=100a^2+20ab+b^2\),  我们理解不清时,把100a不去考虑,仅仅考虑20ab+\(b^2\)形式,提出公因子b,则为20a+b,然后先以20a作为试商,开始第一步不用考虑,只考虑某一个数的平方即可,从第二步,考虑(20a+b)*b的值,以20a作为先前考虑的倍值,忘了说一件事情,笔算开平方,与多位数除法类似,只不过,第一步是先划分,从个位开始,两位数划分一个段落,确定开方数是几位数,划分的段落数即为开方数的位数,与多位数除法不同之处,多位数除法每次是一位一位的下拉,而笔算开平方是两位两位的下拉。现在讲解一个实例,比如125笔算开平方,先划段,1,25,说明开出来的方值是两位数的,第一步是1,1*1=1,所以第一个数上1,1-1=0,把25拉下来,这时,a=1,20a=20,25除20,最大试商是1,另b=1,20a+b=20*1+1=21,(20a+b)*b=21*1=21,25-21=4,补两位数,变成400,这时a=11,20a=220,用220作为试商,400/220=1.多,所以最大试商是1,20a+b=20*11+1=221,(20a+b)*b=221*1=221,400-221=179,再补两位数,变成17900,这时a=111,20a=2220,以2220作为试商,17900/2220=8.063,最大试商是8,另b=8,20a+b=111*20+8=2228,2228*8=17824,17900-17824=76,再次增加两位,变成7600,这时a=1118了,20a=22360,显然7600不是它的倍数,那么只能再扩大2位数,变成760000,........,一直下去,直到满足有效位即可(笔算开平方时要求精确到的位数)。

[此贴子已经被作者于2022-8-21 19:28编辑过]

搜索更多相关主题的帖子: 位数 vfp 除法 最大 平方 
2022-08-20 23:27
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
建一种算法,必须对原理熟悉,陌生方面的肯定难于着手。

素数问题的解决是我学习编程永恒的动力。
2022-08-21 00:22
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
人们对笔算开平方并不感兴趣,因为有开方函数(不同软件中一般应该自带)。

素数问题的解决是我学习编程永恒的动力。
2022-08-22 21:00
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
没有人插手这个问题。如何上手是关键。

素数问题的解决是我学习编程永恒的动力。
2022-08-23 20:41
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
如果没有人发表点看法,这分结转给谁?看来,不能自己挖坑。

素数问题的解决是我学习编程永恒的动力。
2022-08-24 06:36
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
没有办法,只好终止悬赏。

素数问题的解决是我学习编程永恒的动力。
2022-08-25 06:50
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
有时把数学语言用程序翻译出来并不容易。
安照笔算开平方原理,(a+b)^2=a^2+2ab+b^2,把ab看成两位数,a占十位数,b占个位数,则广义二位数ab可写成10a+b的形式,那么(10a+b)^2=100a^2+20ab+b^2,我们暂时不要考虑高位的100a^2,仅仅考虑20ab+b^2,提出公因子b,小括里是(20a+b)这个式子,以20a作为试商,最大值不超9,然后逐步递减。
    当n=3时,原理一样,此时是:(a+b)^3=a^3+3a^2b+3ab^2+b^3,同样不要考虑最高位的a^3,如果也安广义2位数去理解,则把a用10a代替,其结果是1000a^3+300a^2b+30ab^2+b^3,去掉最高位的1000a^3,同样提出提出公因子b,则小括里(300a^2+30ab+b^2),以300a^2作为试商,同理是从个位开始划分段落,每三位一段,小数点后,每次增大三位数,即三位三位的下拉,这是与多位数除法不一致的地方。
     笔算开平方没有统一的模式,至于小数点的就不要强求了。
     知道方法就好,没有必要伤脑筋,2,3,4可以玩一玩,再高,笔算开方也没有多大实际意义。

素数问题的解决是我学习编程永恒的动力。
2022-08-27 20:43
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
这样玩的有点大,不过只要你有耐心,还是可以进行的。
无非就是(10a+b)^10=∑C(n,m)(10a)^(n-m)b^m,n=10,m∈[0,10],也就是11项连加,仍就撇开最高位的10^10*a^10,把后边的式子提出公共因子b来,然后以10*10^9a^9作为试商(最大值为9),试商后计算多项式的值,乘b后不大于拉下的值(每次增位是10位数),计算量有点大,可借助计算机(实际上借助计算机也无济于事,因为位数不够),光靠笔算,真是比登天还难,怕是用A4纸都不够看,要用8裁的纸才能写下,而且保留有效位数不能太多。
    所以,笔算开平方只是加强对二项式展开式的深度理解,这种苛刻的笔算开平方没有更多现实意义,玩它没有什么必要,降降级,玩个n=5,6的情形也可以,锻炼计算的马虎性。

素数问题的解决是我学习编程永恒的动力。
2022-08-27 20:43
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
我也没有细心计算,1.2^13=10.6993205379072
10.6993205379072,第一步,上个1(即,最高位是1,也就是a=1),不能上2,因为2的10次方是1024,从个位往高位划段,每10位数划分一段,10就能划分1段,所以,开方数是一个个位小数。第二步,就步入正规,10-1^10=9,然后拉下10位数,为96993205379,最大试商是2(3就是负数了)。
10a次方    b次方    C(10,i)    系数*(10a)^j    *a^j    *b^i    1    2    积
9    1    10    10000000000    a^9    b^1    1    2    20000000000
8    2    45    4500000000    a^8    b^2    1    4    18000000000
7    3    120    1200000000    a^7    b^3    1    8    9600000000
6    4    210    210000000    a^6    b^4    1    16    3360000000
5    5    252    25200000    a^5    b^5    1    32    806400000
4    6    210    2100000    a^4    b^6    1    64    134400000
3    7    120    120000    a^3    b^7    1    128    15360000
2    8    45    4500    a^2    b^8    1    256    1152000
1    9    10    100    a^1    b^9    1    512    51200
0    10    1    1    a^0    b^10    1    1024    1024
                            减数    51917364224
                            被减数    96993205379
                            差值    45075841155
假设另b=3,
10a次方    b次方    C(10,i)    系数*(10a)^j    *a^j    *b^i    1    3    积
9    1    10    10000000000    a^9    b^1    1    3    30000000000
8    2    45    4500000000    a^8    b^2    1    9    40500000000
7    3    120    1200000000    a^7    b^3    1    27    32400000000
6    4    210    210000000    a^6    b^4    1    81    17010000000
5    5    252    25200000    a^5    b^5    1    243    6123600000
4    6    210    2100000    a^4    b^6    1    729    1530900000
3    7    120    120000    a^3    b^7    1    2187    262440000
2    8    45    4500    a^2    b^8    1    6561    29524500
1    9    10    100    a^1    b^9    1    19683    1968300
0    10    1    1    a^0    b^10    1    59049    59049
                            减数    127858491849
                            被减数    96993205379
                            差值    -30865286470
差值已经是负数了,所以小数点后第一位小数是2,
当是2时,差值为:45075841155,再拉10位数,紧跟着还有0720000000,就成了450758411550720000000,这是个21位的大数,此时a=12,12的9次方,再扩大10^10倍作为试商,你能做到吗?也就是第三步就进行不下去了,如果得到了第三步结果,当第四步时,a是个三位数,它的9次方,再扩大10^10倍作为此时的试商,空拍此时大脑已经快爆炸了,如果毅力够坚强,这一步闯过去了,来到第五步,a是4位数,它9次方,扩大10^10倍作为试商(仅仅给你举了最大项,其实还有9项连加的),.......,如此反复进行,你能精确到小数点后几位数?恐怕不敢贪大。
    所以,原则上笔算开方是可行的,实际上,没有多大的进展。

素数问题的解决是我学习编程永恒的动力。
2022-08-27 20:44
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
10a次方    b次方    C(10,i)    系数*(10a)^j    *a^j    *b^i    12    6    积
9    1    10    10000000000    a^9    b^1    5159780352    6    3.09587E+20
8    2    45    4500000000    a^8    b^2    429981696    36    6.9657E+19
7    3    120    1200000000    a^7    b^3    35831808    216    9.2876E+18
6    4    210    210000000    a^6    b^4    2985984    1296    8.12665E+17
5    5    252    25200000    a^5    b^5    248832    7776    4.87599E+16
4    6    210    2100000    a^4    b^6    20736    46656    2.03166E+15
3    7    120    120000    a^3    b^7    1728    279936    5.80475E+13
2    8    45    4500    a^2    b^8    144    1679616    1.08839E+12
1    9    10    100    a^1    b^9    12    10077696    12093235200
0    10    1    1    a^0    b^10    1    60466176    60466176
                            减数    389394976646954000000
                            被减数    450758411550720000000
                            差值    61363434903766200000
非精确计算,因为电脑的有效位是15位数,已经是21位,借助电脑也无法进行下去。
10a次方    b次方    C(10,i)    系数*(10a)^j    *a^j    *b^i    12    7    积
9    1    10    10000000000    a^9    b^1    5159780352    7    3.61185E+20
8    2    45    4500000000    a^8    b^2    429981696    49    9.4811E+19
7    3    120    1200000000    a^7    b^3    35831808    343    1.47484E+19
6    4    210    210000000    a^6    b^4    2985984    2401    1.50556E+18
5    5    252    25200000    a^5    b^5    248832    16807    1.05389E+17
4    6    210    2100000    a^4    b^6    20736    117649    5.1231E+15
3    7    120    120000    a^3    b^7    1728    823543    1.7077E+14
2    8    45    4500    a^2    b^8    144    5764801    3.73559E+12
1    9    10    100    a^1    b^9    12    40353607    48424328400
0    10    1    1    a^0    b^10    1    282475249    282475249
                            减数    472360210833394000000
                            被减数    450758411550720000000
                            差值    -21601799282673500000
如果试商是7,则为负值。

素数问题的解决是我学习编程永恒的动力。
2022-08-27 20:44



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-509837-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.087299 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved