Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 22582 | Accepted: 12350 |
Description
numbers, so neither 7 + 13 nor 3 + 5 + 5 + 7 is a valid representation for the integer 20.
Your mission is to write a program that reports the number of representations for the given positive integer.
Input
Output
Sample Input
2 3 17 41 20 666 12 53 0
Sample Output
1 1 2 3 0 0 1
2
solution:
先打一個素數表,然後在素數表上尺取
#include<cstdio>
using namespace std;
const int maxn = 2e4 + 200;
int mark[maxn], prime[maxn],cnt;
void init()
{
for (int i = 2; i <= maxn; i++)
{
if (mark[i] == 0)mark[i] = prime[cnt++] = i;
for (int j = 0; j < cnt&&prime[j] * i <= maxn; j++)
{
mark[i*prime[j]] = prime[j];
if (i%prime[j] == 0)break;
}
}
}
int main()
{
int n;
init();
while (scanf("%d", &n) && n)
{
int ans = 0, sum = 0,r=0;
for (int i = 0; i < cnt; i++)
{
while (sum < n)
{
sum += prime[r++];
}
if (sum == n)ans++;
sum -= prime[i];
if (prime[i] > n)break;
}
printf("%d\n", ans);
}
return 0;
}