1701005522
clc,clear,close all %清屏和清除变量 warning off %消除警告 num = 67; for i=1
:35 if 2*floor(num/2)<num %奇数 num = num*3+1; else %偶数 num = num /2; end a(i)=num; end a
1701005523
1701005524
运行程序输出结果如下:
1701005525
1701005526
a = Columns 1 through 9 202 101 304 152 76 38 19 58 29 Columns 10 through 18 88 44 22 11 34 17 52 26 13 Columns 19 through 27 40 20 10 5 16 8 4 2 1 Columns 28 through 35 4 2 1 4 2 1 4 2
1701005527
1701005528
但是,是否对于所有的数,序列最终总会变成4,2,1循环呢?
1701005529
1701005530
直到现在,数学家们仍然没有证明,这个规律对于所有的数都成立。
1701005531
1701005532
1701005533
1701005534
1701005536
我和数学有约:趣味数学及算法解析 3.4 两位数的速乘
1701005537
1701005538
【问题】如果两个两位数的十位相同,个位数相加为10,那么你可以立即说出这两个数的乘积吗?
1701005539
1701005540
【分析】
1701005541
1701005542
如果两个两位数的十位相同,个位数相加为10,采用两位数的速乘方法,你可以立即说出这两个数的乘积。
1701005543
1701005544
如果这两个两位数分别写作AB和AC,那么它们的乘积的前两位就是A和A+1的乘积,后两位就是B和C的乘积。
1701005545
1701005546
比如,47和43的十位数相同,个位数之和为10,因而它们的乘积的前两位就是4×(4+1)=20,后两位就是7×3=21。
1701005547
1701005548
也就是说,47×43=2021。
1701005549
1701005550
类似地,61×69=4209,86×84=7224,35×35=1225,等等。
1701005551
1701005552
这个速算方法采用的算法原理如下:
1701005553
1701005554
1701005555
1701005556
1701005557
对任意x和y都成立。
1701005558
1701005559
具体的MATLAB程序验证如下:
1701005560
1701005561
clc,clear,close all %清屏和清除变量 warning off %消除警告 k=1; for x=1
:5:20 for y=1
:5:20 a = (10*x+y) * (10*x+(10-y)); %等式左边(10x+y)( 10x+(10-y)) b=100*x* (x+1)+y* (10-y); %等式右边100x(x+1)+y(10-y) c(k)=a-b; k=k+1; end end c
1701005562
1701005563
运行程序输出结果如下:
1701005564
1701005565
c = Columns 1 through 9 0 0 0 0 0 0 0 0 0 Columns 10 through 16 0 0 0 0 0 0 0
1701005566
1701005567
因此可知,采用该速乘算法是可行的。
1701005568
1701005569
1701005570
1701005571
[
上一页 ]
[ :1.701005522e+09 ]
[
下一页 ]