完全平方数的末两位数字类型的另一种证明

1. 问题(来自Rosen的《初等数论及其应用》第6版P99第5题)

证明完全平方数的最后两个十进制数字(个位和十位)一定是下列数对之一:{00, e1, e4, 25, o6, e9}

注:e = even number, o = prime number, 0也为偶数

2. 验证一下

n n2 末尾数对类型
0 0 00
1 1 e1
2 4 e4
3 9 e9
4 16 e4
5 25 25
6 36 o6
7 49 e9
8 64 e4
9 81 e1

3. 证明

3.1 思路

要证明n2的个位和十位的数值,简单的做法是将其表示出来,看是否满足一些规律

n2 = n * n

根据我们计算乘法的方法:

设n2 = an…a2a1    (an ∈ {0, 1, …, 9})

放在百位以上的数据已经不影响个位和十位了

设f(x) = x的个位和十位的数列

可知n2的十位和个位f(n2) = f(a1a1 + 10*a2a1 + 10*a2a1)

= f(a12 + 10*(2a2a1))

∴n2个位 = a12 的个位,n2的十位 = (2a2a1) + (a12 的十位)

a1 a12 + 10*(2a2a1) 2a2(十位) 末尾数对类型
0 0 0 00
1 10*(0+2a2) + 1 2a2 = e e1
2 10*(0+4a2) + 4 4a2 = e e4
3 10*(0+6a2) + 9 6a2 = e e9
4 10*(1+8a2) + 6 1+8a2 = o e4
5 10*(2+10a2) + 5 2+10a2 = 2 25
6 10*(3+12a2) + 6 3+12a2 = o o6
7 10*(4+14a2) + 9 4+14a2 = e e9
8 10*(6+16a2) + 4 6+16a2 = e e4
9 10*(8+18a2) + 1 8+18a2 = e e1

∴对于所有的a1,不论a2的值是什么,f(n2)都成立,得证

4. 推论

根据第3部分的证明,我们还可以知道:

1> 只要n的个位 = 5, 则n2个位和十位 = 25,反之也成立

2> 只要n的个位 = 0, 则n2个位和十位 = 00,反之也成立

3> 只要n的个位 = 6, 则n2个位和十位 = o6,反之也成立

4> 不论a2的值是什么,n2个位和十位数列和a12一样,即n2个位和十位数列类型只和n个位相关

时间: 2024-10-11 07:38:53

完全平方数的末两位数字类型的另一种证明的相关文章

java . 请在小于99999的正整数中找符合下列条件的数,它既是完全平方数,又有两位数字相同,如:144,676。

1 import java.util.HashMap; 2 import java.util.Map; 3 import java.util.Map.Entry; 4 //请在小于99999的正整数中找符合下列条件的数,它既是完全平方数, 5 //又有两位数字相同,如:144,676. 6 public class wqs { 7 8 //完全平方数 9 public static boolean iswqs(int n){ 10 int i; 11 double dn=Math.sqrt(n)

确定只出现曾有两位数字数组

称号:除了外面两个数字为整数数组.其他人物都出现两次. 请敲代码,找了两个数字只出现一次.它需要的时间复杂度O(n),空间复杂度是O(1). 或深足够的认识. 要思路还是之前的数组中仅仅出现一次的数字的那种模式,一次遍历加上异或运算.那么这个异或的值肯定是这两个仅仅出现一次的数字的相异或的值.那么这个值的二进制表现形式中的1的结果就表示这两个数字在该bit位上不一样.那么通过此举,我们能够以这个bit位是否为1来从整个数组中把这两个仅仅出现一次的数字分开. 通过此举.别的出现两次的数字一会被分到

js验证连续两位数字递增或递减和连续三位数字相同

<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"> <title></title></head><body><form method="post" class="form-horizontal" role="form" action=&q

输出所有形如aabb的4位完全平方数(即前两位数字相等,后两位数字也相等)

计算完全平方根可以使用math库中的sqrt完成,但需要注意以下几点:a取值应为1-9,b取值为0-9:完全平方得到的结果是浮点型,因为浮点型不像整形可能有误差的存在(TODO:浮点型计算误差),可以使用floor(sqrt(x)+0.5)来减小误差,这里稍微展开说下:如果sqrt(x)的结果本来是1,由于浮点计算的误差导致结果为0.9999,那么cast到int型其结果就是0,因此用四舍五入的方式来减少这种误差(这涉及到浮点型的精度问题,如果精度较高的浮点表示,那计算结果于预期的波动会相对较小

取两位数字,截取数字,求年龄,去除前后空格

//取两位数 function toDou(n) { if(n < 10) { return '0' + n } else { return '' + n } } //截取数字 function getN(s) { if(s) { return s.replace(/[^0-9\.]/ig, ""); } } //去除前后空格 String.prototype.trim = function() { return this.replace(/(^\s*)|(\s*$)/g, ''

decimal类型数据如何保留两位小数

日常开发中,decimal作为货币类型,经常会处理保留两位小数的问题. 本站整理两种,decimal类型保留两位小数的方法. 第一种: decimal d = 46.28111m;string res=d.ToString(“#0.00”); //结果=46.28 第二种: double d=45.123456;string res=double.Parse(String.Format(“{0:N}”, d)).ToString(); //结果=45.12 转载请注明:三只源码 » decima

iOS中UITextField输入判断小数点后两位

在输入金额的UITextField中,要给予三个规则的判断 1. 只能输入数字(可以通过设置键盘类型为Decimal Pad) 2. 小数点只能有一个 3. 小数点后最多有两位数字 (可以通过正则表达式或者长度判断) 2. 和3. 的代码 (首先引入UITextFieldDelegate,指定代理为自己) - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacem

对oracle数字类型的研究

Oracle的数字类型主要有number,binary_float,binary_double三类,其他的像int,number(p,s)等等大多数都是由这些引申出来的.这部分的理解主要来自oracle11g编程艺术. 其中提到的一个很有意思的东西就是number是软件模拟运算,而binary类型则是硬件直接运算,所以在性能方便的差距还是很大的,我们以事实说话. SELECT * FROM NUMTABLE: 里面的数字是1----77760,类型分别为number,binary_float,b

数字类型的操作

一.内置数值运算操作符 Python提供了9个基本的数值运算操作符,如表3.2所示.这些操作符由python解释器直接提供,不需要引用标准或第三方函数库,也叫内置操作符. 1.x+y  x与y之和2.x-y  x与y之差3.x*y  x与y之积4.x/y  x与y之商5.x//y  x与y之整数商,即不大于x与y之商的最大整数6.x%y  x与y之商的余数,也称模运算7.-x  x的负值,即x(-1)*8.+x  x的本身9.x**y  x的y次幂,即x^y 这9个操作数与数学 习惯一致,运算结