深度自同构

  • 朴素筛法的复杂度为调和级数的复杂度,也就是O(nlogn),对于\(n=10^6\)来说,小常数的O(nlogn)算法完全可以通过,线性欧拉筛法则可以处理\(n=10^7\)的情况
  • 通过新增虚拟根节点,将森林转化为树
  • 本地测试输出\(10^6\)个数需要2s,但OJ评测完全可以通过
  • 记得给f[n+1]取模
点击查看代码
#include <bits/stdc++.h>
using namespace std;
const int mod=998244353;
long long f[1000005];
int main()
{
	int n;
	cin>>n;
	f[0]=f[1]=1;
	for(int i=1;i<=n;i++)
	{
		f[i]%=mod;
		for(int j=1;j*i+1<=n+1;j++)
		{
			f[j*i+1]=f[j*i+1]+f[i];
		}
	}
	f[n+1]%=mod;
	for(int i=1;i<=n;i++)
	{
		printf("%lld ",f[i+1]);
	}
	cout<<endl;
	return 0;
}
posted @ 2024-07-27 12:04  D06  阅读(40)  评论(0编辑  收藏  举报