数根(又称数字根或位数根,Digital root)是自然数的一种性质,每个自然数都有一个数根。数根是通过将一正整数的各个位数相加(即横向相加),若加完后的值大于10,则继续将各位数进行横向相加,直到其值小于10为止,所得到的数即为数根。
定义
将一正整数的各个位数相加(即横向相加)后,若加完后的值大于等于10的话,则继续将各位数进行横向相加直到其值小于十为止所得到的数,即为数根。换句话说,数根是将一数字重复做其数字之和,直到其值小于十为止,则所得的值为该数的数根。例如54817的数根为7,因为,25大于10则再加一次,,7小于十,则7为54817的数根。
性质
数根具有以下性质:
- 与原数加9的结果的数根相同,即一个数加9后它的数根不变。
- 数根可以计算模9之模运算的同余,对于非常大的数字的情况下可以节省很多时间。
- 数字根可作为一种检验计算正确性的方法。例如,两数字的和的数根等于两数字分别的数根的和。
- 数根也可以用来判断数字的整除性,如果数根能被3或9整除,则原来的数也能被3或9整除。
公式计算
数根的计算可以通过公式简化:一个数a的数根可以表示为mod(a,9),且当a是9的倍数时,数根为9。
编程计算
1234567891011121314151617181920212223242526272829303132#include <stdio.h>int main(void){ //一般人思路:2345->2,3,4,5->14->1,4->5 char str[1001]; int i, sum; while (1) { gets(str); if (str == '0') break; for (i = 0, sum = 0; str[i] != '\0'; i++) sum += str[i] - '0'; printf("%d\n",(sum - 1) % 9 + 1); } return 0;} //优化算法,递归回炉重造unsigned int f(unsigned int n){ unsigned int ret = 0; do ret += n%10; while(n /= 10); if(ret < 10) return ret; else return f(ret);} //公式法直接求数根int test(int num){ return 1 + (num - 1) % 9;}
用途
数根不仅是一个数学上的性质,它还有实际的应用价值:
- 在进行模9的同余计算时,数根可以简化计算过程,特别是对于非常大的数字。
- 数根可以用作检验计算正确性的一种方法,通过比较和的数根与各加数的数根的和来验证。
- 在判断一个数是否能被3或9整除时,数根提供了一种快速的方法,因为如果一个数的数根能被3或9整除,那么这个数也能被3或9整除。