因子平方和

6 的因子有 1, 2, 3 和 6, 它们的平方和是 1 + 4 + 9 + 36 = 50. 如果 f(N) 代表正整数 N 所有因子的平方和, 那么 f(6) = 50.
现在令 F 代表 f 的求和函数, 亦即 F(N) = f(1) + f(2) + .. + f(N), 显然 F 一开始的 6 个值是: 1, 6, 16, 37, 63 和 113.
那么对于任意给定的整数 N (1 <= N <= 10^8), 输出 F(N) 的值.
这题咱们要慢慢的看
首先,我试了一下10,发现一个规律:(对于总共的所有因子)
因子数字:1 2 3 4 5 6 7 8 9 10
因子个数:10 5 3 2 2 1 1 1 1 1
n/2以后都是1啊
然后前面的个数都是n/1取整
那么1~n/2就这么写一下:1**2*(n/1),第二个2**2*(n/1),以此类推
然后再观察一下,到根号n的时候,都是不一样的数字,根号n之后有一样的数字
那么,把根号n之前的加在一起做第一个和
然后发现,1到最后一个,也就是n,2到n/2个
由平方和公式 

4~10的平方和等于1~10减去1~3

观察,根号n后面有一个4~10,一个4~5

也就是一个根号n到n/1(对应的数1),一个根号n到n/2(对应数2)

ps:这个2是根号n-1

那么写出程序计算分开计算,记得先算出1到根号n的平方和,别重复计算

N = 10
n0 = N**(1/2.0)
if n0 > int(n0)+0.4:
    n0 = int(n0)+1
else:
    n0 = int(round(n0))
S = 0
s = n0*(n0+1)*(2*n0+1)/6
for i in range(1, n0+1 ):
    S += (i**2)*(N/i)
for j in range(1, n0):
    n = N/j
    S += n*(n+1)*(2*n+1)/6 - s
print S
测试的时候发现2,12等不对,然后发现当小数第一位大于4,比如根号2=1.414,这里就要进上去,根号2等于2
具体为啥我也不太清楚,规律吧。。。

转载于:https://www.cnblogs.com/webgavin/p/5406132.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值