結果
| 問題 |
No.458 異なる素数の和
|
| コンテスト | |
| ユーザー |
bal4u
|
| 提出日時 | 2019-04-23 22:47:46 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 833 bytes |
| コンパイル時間 | 298 ms |
| コンパイル使用メモリ | 31,744 KB |
| 実行使用メモリ | 6,824 KB |
| 最終ジャッジ日時 | 2024-11-06 07:21:25 |
| 合計ジャッジ時間 | 5,248 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | RE * 3 |
| other | AC * 3 WA * 1 RE * 24 |
ソースコード
// yukicoder: No.458 異なる素数の和
// 2019.4.23 bal4u
#include <stdio.h>
#include <string.h>
#include <math.h>
#define MAX 20000
#define SQRT 141 // sqrt(MAX)
char prime[MAX+2] = {1,1,0,0,1,0,1,0,1,1,0}; // 0:素数
int tbl[2300], sz; // sz=2262
int a[MAX+2];
int b[MAX+2];
void sieve(int n)
{
int i, j, b;
b = (int)sqrt((double)n);
for (i = 3; i <= b; i += 2) {
for (j = i*i; j <= n; j += i) prime[j] = 1;
}
tbl[0] = 2, sz = 1;
for (i = 3; i <= MAX; i+=2) if (!prime[i]) tbl[sz++] = i;
}
int main()
{
int i, j, N;
scanf("%d", &N);
sieve(N);
a[N] = 1;
memset(b, -1, sizeof(b));
for (i = N; i >= 0; i--) if (a[i]) {
for (j = b[i]+1; j < sz; j++) {
if (i-tbl[j] >= 0) a[i-tbl[j]] = a[i]+1, b[i-tbl[j]] = j;
}
}
if (a[0] == 0) puts("-1");
else printf("%d\n", a[0]-1);
return 0;
}
bal4u