自然数性质-数根
数根
数根的定义#
数根是自然数的一种性质,将一正整数的各个位数相加(即横向相加)后,若加完后的值大于等于10的话,则继续将各位数进行横向相加直到其值小于十为止所得到的数,即为数根。换句话说,数根是将一数字重复做其数字之和,直到其值小于十为止,则所得的值为该数的数根。例如54817的数根为7,因为5+4+8+1+7=25,25大于10则再加一次,2+5=7,7小于十,则7为54817的数根。 ---百度百科
那么,其实用编程的方法来求数根的思路很简单,要么迭代,要么递归,但两者的时间复杂度不会有差别,反而后者会占用程序栈的空间。
数根的一般代码#
直接上代码
//迭代法
int digitRoot(int n){
while(n >= 10){
int res = 0;
while(n){
int temp = n % 10;
n /= 10;
res += temp;
}
n = res;
}
return n;
}
//递归法
int digitRoot(int n){
//base case
if(n < 10)
return n;
int sum = 0;
while(n){
int temp = n % 10;
n /= 10;
sum += temp;
}
return digitRoot(sum);
}
数根的公式和性质#
但是,数根其实是有公式的,可以直接让代码复杂度降到O(1)
int digitRoot(int n){
return --n % 9 + 1;
}
接下来看看这个公式怎么得来的。
首先看看数根的性质
-
任何数字加9,数根不变:假设一个两位数18,如果加9,就是让十位数加1,个位数减1,各个位的数字总和不变,即数根不变。
-
任何数字乘9,数根都为9:其实把对象互换一下就能理解,9的数根肯定为9,让9乘任何数,就是让9不停地加9。根据上条性质可得,数根不变。即数根肯定为9。
数根的公式推导#
假定一十进制数 X为X0X1X2...Xn-1Xn
在进位制种表达式为
由于
可得,一个数和他各位数之和的模9同余
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)