深度自同構

D06發表於2024-07-27
  • 樸素篩法的複雜度為調和級數的複雜度,也就是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;
}

相關文章