結果

問題 No.1581 Multiple Sequence
ユーザー 👑 ygussanyygussany
提出日時 2021-07-02 22:12:08
言語 C
(gcc 13.3.0)
結果
AC  
実行時間 63 ms / 2,000 ms
コード長 667 bytes
コンパイル時間 1,010 ms
コンパイル使用メモリ 29,952 KB
実行使用メモリ 124,916 KB
最終ジャッジ日時 2024-06-29 11:46:44
合計ジャッジ時間 2,212 ms
ジャッジサーバーID
(参考情報)
judge1 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 21
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <stdio.h>

const int Mod = 1000000007;
int div[100001][300] = {};
long long memo[100001];

long long recursion(int M)
{
	if (memo[M] >= 0) return memo[M];
	else memo[M] = 0;

	int i;
	for (i = 0; div[M][i] > 0; i++) memo[M] += recursion((M - div[M][i]) / div[M][i]);
	memo[M] %= Mod;
	return memo[M];
}

int main()
{
	int M;
	scanf("%d", &M);
	
	int i, k, l[100001] = {};
	long long ans = 0;
	for (i = 1; i <= M; i++) for (k = i; k <= M; k += i) div[k][l[k]++] = i;
	for (k = 1, memo[0] = 1; k <= M; k++) memo[k] = -1;
	for (i = 0; div[M][i] > 0; i++) ans += recursion((M - div[M][i]) / div[M][i]);
	printf("%lld\n", ans % Mod);
	fflush(stdout);
	return 0;
}
0