各位和整除数的问题
来源:互联网 发布:必利劲有依赖性吗 知乎 编辑:程序博客网 时间:2024/06/12 01:13
http://topic.csdn.net/u/20090531/20/b001f8fb-fe3e-4718-b109-1aa107a38d9c.html
设某特定的数为,该数的所有位数之和可被该数整除,比如说 12 => 1 + 2 = 3|12。给定 n,找出所有小于 n 的满足该条件的整数的个数。
若可以这么想:比如说,举一个响亮点儿的数:69吧。6 + 9 = 15->1 + 5 = 6,也就是直到加为一个个位数的话,那么这个数,将是原数除以9的余数。也有人将这一余数称为数的“根”。
ttklboy同学对此给了详细的思想:
每个数的各位相加的和就是该数除9的余数。
当余数是 0 或 1 时,这个数一定满足条件。比如 1,10,19,28。
当余数是 2 时,这个数可以表示为 2+9*x,当x为偶数时,该数满足条件,x为奇数时,不满足条件,所有余数为2 的数中有一半满足条件。
余数是 4 时,这个数可以表示为 4+9*x,当x是4的整数倍时,该数满足条件,所以余数为4的数中有四分之一满足条件。
余数为 5,7,8 时情况相似。
而余数为 3 时,该数可以表示为 3+9*x,该数一定满足条件,因为式中 9 就是 3 的倍数。
余数为 6 时,该数可表示为 6+9*x,该数只有一半满足条件,因为只要保证 x 为偶数就可以。
我将他的思想实现如下:
但原题不是这样的,只许合一次,不迭代。
但是这种思想还是值得扩展的。
试想,还以 69 这个响亮的数字来举例,6+9 = 15,那么 69-15 呢?54,是9的倍数!
我试了好多数,发现,对于数 n,设 f(n) 为 n 的各位加和,则 n = f(n) + 9x !
好了,如果想满足条件,则必须 f(n) | 9x,也就是说,9x 共有多少个约数,对于此特定的 x,就有多少个 n 满足条件。
设 x = a^p + b^q + c^r +.....,其中 a, b, c 为质数,p,q,r 为指数,则 x 的从 1 到 x 的全约数个数为 (p+1)(q+1)(r+1).......注意这里,全约数的个数,就是符合条件的 f(n) 的个数,也就是符合条件的 n 的个数。别忘了,这里还有一个 9 = 3^2 的事儿。若 x 含有质因数 3,需要合并进去,否则的话,9x 的全约数的个数还要乘以一个 (2 + 1)
这就好办了!对于 9x <= n / 2 以内的部分,直接可以通过求质约数的分布,由上式直接得出个数,但是对于 n/2 到 n 的部分,需要考虑 f(n) + 9x 会超过 n 的情况,注意这里 f(n) 属于集合 {m| 9x % m == 0 }。这里,由于 f(n) 最大可为 9x,故而以 n / 2 为分界。目前没有找到好办法,似乎必须把所有约数给算出来,而不单单是数个数就完了的……
待续……
- 各位和整除数的问题
- 各位和整除数的问题
- [证明]一个数能被3整除,当且仅当它的各位数的和能被3整除。
- 证明一个数能被3整除,当且仅当它的各位数的和能被3整除!
- 输出所有三位数中,能被11整除,并且各位数字和为10的数
- “X整除3,那么X的各位数之和也整除3”的证明
- BZOJ 1799 self 同类分布(数位dp,区间各位数字和能整除原数的数字个数)
- 输出满足各位数之和被23整除的数(难度:半颗星)
- printf输出问题和c语言求3,5,7整除的数的问题
- 任何一个能够被3整除的正整数,取各位数字的立方和,再取各位数字的立方和, 重复有限次,必得到 153 这个数,且 153 再重复也还是153
- 求一个整数各位数的和
- 计算正整数各位数的和---345
- 子数组和问题,和被某个数整除
- 数的整除性质
- /*100-1000的各位数字和被15整除c语言*/
- oj整除和商的问题1104
- 数,各位上的数最大值和最小值的乘积
- 第九周项目5(1)求1000以内能被3整除且各位为6的数
- 最美不过夕阳红(图)
- 运气在财富积累上到底占有多大权重?
- windows 时间同步间隔设置
- Debug版本和Release版本区别---C++中的常量字符串
- tomcat多端口,多web程序的一点学习经验
- 各位和整除数的问题
- Windows下安装IBM CICS
- 有过完一学期了!!
- SET不同!(补3月6日的作业)
- TCP不适用于实时传输的原因
- (转)我们三十以后才明白
- 如何手写代码以生成Composite图表?
- 两百行写一个递归下降解析器
- 我们毕业了。