如果i为奇数,肯定有一个1,把f[i-1]的每一种情况加一个1就得到fi,所以f[i]=f[i-1]
如果i为偶数,如果有1,至少有两个,则f[i-2]的每一种情况加两个1,就得到i,如果没有1,则把分解式中的每一项除
2,则得到f[i/2]
所以f[i]=f[i-2]+f[i/2]
由于只要输出最后9个数位,别忘记模1000000000
#include <stdio.h>
int main() {
int n;
int f[1000005];
f[1] = 1;
f[2] = 2;
for(int i=3; i<=1000000; i++) {
if(i%i)
f[i] = f[i-1];
else {
f[i] = f[i-2] + f[i/2];
f[i] %= 1000000000;
}
}
scanf("%d", &n);
printf("%d\n", f[n]);
return 0;
}