9
琐碎的序列的扭曲
介绍 考虑定义如下的整数f的序列: f(2)= 2 如果n是奇数素数,则f(n)=(f(n-1)+ f(n + 1))/ 2 如果n = p·q是合成的,则f(n)= f(p)·f(q) 不难发现每n≥2 f(n)= n,因此计算f并不是一个非常有趣的挑战。让我们改变一下定义:将第一种情况减半,第二种情况加倍。我们得到一个新的序列g,定义如下: g(2)= 1 如果n是奇质数,则g(n)= g(n-1)+ g(n + 1) 如果n = p·q是合成的,则g(n)= g(p)·g(q) 任务 您的任务是将整数n≥2作为输入,并产生g(n)作为输出。您不必担心整数溢出,但是您应该能够正确计算g(1025)= 81,并且您的算法在理论上应该适用于任意大的输入。 您可以编写完整的程序或函数。最低字节数获胜。 例 我声称g(1025)= 81以上,因此我们手动进行计算。1025的素数分解给出 1025 = 5*5*41 => g(1025) = g(5)*g(5)*g(41) 由于41是素数,我们得到 g(41) = g(40) + g(42) 接下来,我们计算40和42的素因式分解: 40 = …