• 题意
    \(a[0]=a[1]=1,a[i]=a[i-1]*a[i-2]*i\)
    \(a[n]\)的因子个数。
  • 思路:
    打个\(a\)的表,上oeis一查。
    发现:\(a[i]=\prod\limits_{k=0}^{n-1}(n-k+1)^{Fib(k)}\)
    然后求出每个质数的幂次,这个枚举\([2,n]\)每个数分解因数,把贡献加上去即可。当然直接枚举质数找倍数算贡献也是可以的。
  • code:
点击查看代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=1e9+7;
const int N=1e6+5;
ll P[N],fib[N];
vector<int> V[N];
void init(int n) {
	for(int i=2;i<=n;i++) {
		if(V[i].size())continue;
		for(int j=i;j<=n;j+=i) {V[j].push_back(i);}
	}
}

void solve(int n) {
	for(int k=0;k<n;k++) {
		int x=n-k+1,t=x;
		for(int j=0;j<V[t].size();j++) {
			int y=V[t][j];
			while(x%y==0) {
				P[y]=(P[y]+fib[k])%mod;x/=y;
			}
		}
	}
	ll ans=1;
	for(int i=1;i<=n;i++) {ans=ans*(P[i]+1)%mod;}
	printf("%lld",ans);
}

int main() {
	int n;scanf("%d",&n);
	init(n+1);
	fib[0]=0;fib[1]=1;
	for(int i=2;i<=n;i++)fib[i]=(fib[i-1]+fib[i-2])%mod;
	solve(n);
	return 0;
}