У меня есть эта проблема:
Некоторые положительные целые числа могут быть представлены суммой одного или нескольких последовательных простых чисел. Сколько таких представлений имеет данное положительное целое число?
Например, целое число 53 имеет два представления 5 + 7 + 11 + 13 + 17 и 53. Целое число 41 имеет три представления 2 + 3 + 5 + 7 + 11 + 13, 11 + 13 + 17 и 41 Целое число 3 имеет только одно представление, которое равно 3. Целое число 20 не имеет
такие представления.
Обратите внимание, что слагаемые должны быть последовательными простыми числами, поэтому ни 7 + 13, ни 3 + 5 + 5 + 7 не являются допустимым представлением для целого числа 20.
Миссия состоит в том, чтобы написать программу, которая сообщает количество представлений для данного положительного целого числа.
Пример ввода:
2
3
17
41
20
666
12
53
0
Пример вывода:
1
1
2
3
0
0
1
2
Я использовал метод seive, чтобы получить массив простых чисел, p [10011].
Мой код:
#include <stdio.h>
int main()
{
int n, i, j, k, l, sum, count, ara[10011], d[10011];
while (-1)
{
for (i = 2; i <= n; i++)
{
ara[i] = 0;
}
l = 0;
while (1)
{
k = 0;
scanf("%d", &n);
int p[n];
count = 0;
for (i = 2; i <= n; i++)
{
if (ara[i] == 0)
{
for (j = 2 * i; j <= n; j += i)
{
ara[j] = 1;
}
}
}
for (i = 2; i <= n; i++)
{
if (ara[i] == 0)
{
p[k++] = i;
}
}
for (i = 2; i <= n; i++)
{
if (ara[i] == 0)
{
p[k++] = i;
}
}
for (i = 0; i < k; i++)
{
sum = 0;
for (j = i; j < k; j++)
{
sum += p[j];
if (sum == n)
{
count++;
break;
}
}
}
d[l] = count;
if (n == 0)
break;
l++;
}
for (i = 0; i < l; i++)
{
printf("%d\n", d[i] / 2);
}
}
return 0;
}