平方数的口算或巧算

  

  看到电视里讲 999*999 的口算方法: 先去掉一个 9 , 得到 99, 然后后面写个8, 然后 8 前面有几个 9, 后面就写几个 0, 最后加个1, 得到 998001. 敏感的我一看就其中肯定是从计算法则中挖掘的规律。而且没有这么复杂。请看

  999*999 =(1000-1)^2 = 1000*1000 - 2*1000 + 1 = (1000-2) * 1000 + 1*1

因此更简单的口诀是: 前面写个 998, 后面写个 001. 前面有几个数, 后面就有几个数。

  不信, 你算算, 9999999*9999999 = 99999980000001  

  依次类推, 9997 × 9997 = 99940009

        9988 × 9988 = 99760144

  你找到口诀了吗? 99XX 距离 10000 假设是 N , 那么 最终的得数是 (99XX-N)【前半部分】(N×N)【后半部分】。 其中前后部分的数位相同。 因此, 会出现“数越大反而越好算”的“奇怪”规律。 

  同理, 可以计算 99966 × 99966 = 9993201156 其中 99932 = 99966 - (100000-99966) ,  1156 = 34*34

  计算原理: 99XX * 99XX= (10000 - N) ^2 = (N-10000)^2 = (10000-2N)×10000 + N*N = ((10000-N)-N)*10000+N*N

  注意到 只要9的数目大于或等于非9的数目,就可以使用这个方法快速计算出平方数

  这样, 你就可以将高位数的平方转化为低位数的平方。对于高位数来说, 你所需要的只是加减法和保持数位相同。

对于两位数的平方, 上面的规律依然适用。 比如 86*86 = [86-14]00 + 14*14 = 7396 这样的话,需要熟悉低位数的平方。

1.  首先, 个位数为5的平方非常好算。 低两位总是25, 高两位是十位数×(十位数+1)

     比如, 45*45 = (4*5)25 = 2025, 65*65 = (6*7)25=4225 

计算原理: (A*10 + 5)^2 = A*A*100 + 100A + 25 = A(A+1)*100 + 25

2.   其次, 可以通过容易计算的数的平方来推导所要计算的数的平方:  a*a  = b*b +  (a+b)(a-b)

相邻的两个数的平方之差等于两个数的和:  (A*10+B+1)^2 - (A*10+B)^2 = (A*10+B)(A*10+B+1)

         11*11 = 121,  12*12 = 144, 13*13 = 169 , 14*14 = 169 + (13+14) = 196 , 15*15 = 225, 16*16 = 225 + 31 = 256 

         据此,可以推导任意数的平方, 只要能够对加减法快速口算。

 

          (A*10+B)^2 - (A*10+D)^2 = [((A*10+B) + (A*10+D) ] * (B-D)

34*34 = 30*30 + 4*64 = 1156  或者 34*34 = 35*35 - (34+35) = 1225 - 69 = 1156

78*78 = 75*75 + 3*153 = 5625 + 459 = 6084 或者 78*78 = 6400 - 2*158 = 6084

     离5比较近的就使用X5作为临近数,离0比较近的就使用X0作为临近数。

两位数的平方还有一种奇淫巧计(需要三位数加法快速口算):

    78 * 78 = (7*7)(8*8) + 2*7*8*10 = 4964 + 1120 = 6084 = (496+112)*10 + 4

?    67*67 = 3649 + 840 = 4489 = (364+84)*10 + 9    

 计算原理: (A*10+B)*(A*10+B) = (A*A*100 + B*B) + 20AB = [A*A][B*B] + 20AB 

                       = 10*[10A*A+(B*B-x)/10 + 2AB] + x

x 是 B*B 的个位数。        

这样, 就解决了两位数平方的口算或巧算问题。

    三位数的平方(高位数加法+两位数平方):

    (100A+10B+C)^2 = 100*(10A+B)^2 + (10B+C)^2 + (2AC-B*B)*100

764*764 = 76*76 *100 + 64*64 + (56-36)*100 = 577600 + 4096 + 2000 = 583696

总之, 任何口算或巧算, 其实都有一个计算公式在后面支撑。 而这个计算公式无非是将各个计算项进行重组, 使得更容易口算或巧算得到数位的数字。

时间: 2024-10-13 10:51:42

平方数的口算或巧算的相关文章

hdu1030 金字塔平方数求层数 数学题

这题我想了好久没思路,其实看得出来和高度有关,可能觉得算高度比较麻烦,想了一会,思路就断在那里了,现在知道了基础的重要性了,有些题目,可能第一步知道怎么思考了,就会容易很多 代码看过了,思路还是很清晰的,跨过的边就是层高,左层高 ,右层高的差值,下图所示,(代码明天有空再贴吧...) leve_n right_n left_n 其实比起来,怎么求层高是做完这题,我收获最大的,下面我来总结一下 leve 1:1->1 leve 2:3 ->4 leve 3:5 ->9 leve 5:7 -

排它平方数

第四届蓝桥杯C/C++ A组第二题,题目如下: 小明正看着 203879 这个数字发呆.原来,203879 * 203879 = 41566646641.这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字.具有这样特点的6位数还有一个,请你找出它! 再归纳一下筛选要求: 1. 6位正整数 2. 每个数位上的数字不同 3. 其平方数的每个数位不含原数字的任何组成数位 首先把代码贴上来吧: 1 #include<e

Project Euler 98:Anagramic squares 重排平方数

Anagramic squares By replacing each of the letters in the word CARE with 1, 2, 9, and 6 respectively, we form a square number: 1296 = 362. What is remarkable is that, by using the same digital substitutions, the anagram, RACE, also forms a square num

C语言(7)--高精度加法、减法、乘法、今天是星期几、四位平方数、候选人选票问题

1.高精度加法.减法.乘法 #include <stdio.h> #include <string.h> #include <malloc.h> void plus(char *a,char *b,char *c);//自定义高精度加法函数 void sub(char *a,char *b,char *c);//自定义高精度减法函数 void multiply(char *a,char *b,char *c);//自定义高精度乘法函数 int main() { char

大型网站首页执行时间0.3秒,性能算好还是算坏?

正在编写一个大型网站,本机调试时首页执行时间到了0.3秒(APP_DEBUG为true时),这样的性能算好还是算坏?网站日pv20万左右,日IP2万左右. 本机配置:CPU:AMD A8-7650k,内存:8g 极好 : 20毫秒内 保证 : 80毫秒内 可以接受 100毫秒 再大有些难以接受 开启缓存 可以改善很多

洛谷P1206 [USACO1.2]回文平方数 Palindromic Squares

P1206 [USACO1.2]回文平方数 Palindromic Squares 271通过 501提交 题目提供者该用户不存在 标签USACO 难度普及- 提交  讨论  题解 最新讨论 暂时没有讨论 题目描述 回文数是指从左向右念和从右向左念都一样的数.如12321就是一个典型的回文数. 给定一个进制B(2<=B<=20,由十进制表示),输出所有的大于等于1小于等于300(十进制下)且它的平方用B进制表示时是回文数的数.用’A’,’B’……表示10,11等等 输入输出格式 输入格式: 共

立项前的成本算还是不算?

今天Q群有朋友提到这个话题,以下是提问原文: "目前公司的关于项目立项的制度是只有立项评审通过后,才会在项目管理的系统上创建这个项目,那么现在的问题是,立项前该项目投入的人力及工作量是没有办法收集和统计的.我个人的建议是先在项目管理系统上创建项目信息,这样立项前的投入也可以收集和统计到.但是据说涉及到项目管理的一些问题,所以不被采纳.那么关于项目立项前的投入的人力及工作量,如何管理各位有没有什么好的建议么?" 各位朋友给出了精彩的建议!后来我追问了几个问题,了解到更多情况: 拒绝这个建

sicily-2499 平方数

题目分析: 一个数可以表示成四种状态,所以可以用一个状态数组来存放该数由几个数的平方和表示.1.表示该数本身是完全平方.2.表示该数是由两个平方和3.表示三个.4.表示4个.一次遍历找出本身是完全平方的数,二次遍历找出后两种情况. #include <iostream> #include <map> using namespace std; const int N = 60001; int main() { int s[60001] = {0}; int t,n; for(int

BZOJ2440(全然平方数)二分+莫比乌斯容斥

题意:全然平方数是指含有平方数因子的数.求第ki个非全然平方数. 解法:比較明显的二分,getsum(int middle)求1-middle有多少个非全然平方数,然后二分.求1-middle的非全然平方数个数能够用总数减掉全然平方数个数.计算全然平方数的个数用容斥: 首先加上n/(2*2)+n/(3*3)+n/(5*5)+n/(7*7)...+...然后减掉出现两次的,然后加上三次的...奇加偶减.这就是mou的原型,用mou数组计算非常easy: 代码: /*****************