主力队对抗赛 Sum of Different Primes

Sum of Different Primes

Time Limit : 10000/5000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 3   Accepted Submission(s) : 1
Problem Description
A positive integer may be expressed as a sum of different prime numbers (primes), in one way or another. Given two positive integers n and k, you should count the number of ways to express n as a sum of k different primes. Here, two ways are considered to be the same if they sum up the same set of the primes. For example, 8 can be expressed as 3 + 5 and 5 + 3 but the are not distinguished.

When n and k are 24 and 3 respectively, the answer is two because there are two sets {2, 3, 18} and {2, 5, 17} whose sums are equal to 24. There are not other sets of three primes that sum up to 24. For n = 24 and k = 2, the answer is three, because there are three sets {5, 19}, {7, 17} and {11, 13}. For n = 2 and k = 1, the answer is one, because there is only one set {2} whose sum is 2. For n = 1 and k = 1, the answer is zero. As 1 is not a prime, you shouldn锟斤拷t count {1}. For n = 4 and k = 2, the answer is zero, because there are no sets of two different primes whose sums are 4.

Your job is to write a program that reports the number of such ways for the given n and k.

Input

The input is a sequence of datasets followed by a line containing two zeros separated by a space. A dataset is a line containing two positive integers n and k separated by a space. You may assume that n 锟斤拷 1120 and k 锟斤拷 14.

Output

The output should be composed of lines, each corresponding to an input dataset. An output line should contain one non-negative integer indicating the number of the ways for n and k specified in the corresponding dataset. You may assume that it is less than 231.

Sample Input

24 3 
24 2 
2 1 
1 1 
4 2 
18 3 
17 1 
17 3 
17 4 
100 5 
1000 10 
1120 14 
0 0

Sample Output

2 
3 
1 
0 
0 
2 
1 
0 
1 
55 
200102899 
2079324314

 
二维母函数c1[num][len] len用来控制长度
#include <stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<queue>
using namespace std;
int main(int argc, char *argv[])
{
	int n,len;
	int i,j;
	int c1[10001][20]; int c2[10001][20];
	int bit[200];
	bit[0]=2;
	int cnt=1;
	for(i=3;i<2000;i++)
	{
		int judge=false;
		for(j=2;j*j<=i;j++)
		{
			if(i%j==0)
			{
				judge=true;
				break;
			}	
		}
		if(!judge)bit[cnt++]=i;
	}
	
	while(scanf("%d %d",&n,&len)!=EOF)
	{
		memset(c1,0,sizeof(c1));
		memset(c2,0,sizeof(c2));
		c1[bit[0]][1]=1;			
		c1[0][0]=1;
		int k;
		int max1;
		for(i=0;i<200;i++)
		{
			if(bit[i]>n)
			{
				max1=i-1;
				break;	
			}
		}
	//	printf("%d %d\n",bit[max1],max1); 5 2
		for(k=1;k<=max1;k++)
		{
			for(i=0;i<=n;i++)
			{
				for(j=0;j+i<=n&&j<=bit[k];j+=bit[k])
				{
				//	printf("%d ",j);
					for(int q=0;q<=len;q++)
					{
						if(j==0)
						{
							c2[i+j][q]+=c1[i][q];
						}	
						else
						{
							c2[i+j][q+1]+=c1[i][q];
						}
					}						
				}
				
			}
			for(j=0;j<=n;j++)
				{
					for(int q=0;q<=len;q++)
					{
						c1[j][q]=c2[j][q];
						c2[j][q]=0;
					}
				}
		}
		printf("%d\n",c1[n][len]);
	}
	return 0;
}


Sum of Different Primes

09-02

A positive integer may be expressed as a sum of different prime numbers (primes), in one way or another. Given two positive integers n and k, you should count the number of ways to express n as a sum of k different primes. Here, two ways are considered to be the same if they sum up the same set of the primes. For example, 8 can be expressed as 3 + 5 and 5 + 3 but the are not distinguished.nnWhen n and k are 24 and 3 respectively, the answer is two because there are two sets 2, 3, 18 and 2, 5, 17 whose sums are equal to 24. There are not other sets of three primes that sum up to 24. For n = 24 and k = 2, the answer is three, because there are three sets 5, 19, 7, 17 and 11, 13. For n = 2 and k = 1, the answer is one, because there is only one set 2 whose sum is 2. For n = 1 and k = 1, the answer is zero. As 1 is not a prime, you shouldn��t count 1. For n = 4 and k = 2, the answer is zero, because there are no sets of two different primes whose sums are 4.nnYour job is to write a program that reports the number of such ways for the given n and k.nnInputnnThe input is a sequence of datasets followed by a line containing two zeros separated by a space. A dataset is a line containing two positive integers n and k separated by a space. You may assume that n �� 1120 and k �� 14.nnOutputnnThe output should be composed of lines, each corresponding to an input dataset. An output line should contain one non-negative integer indicating the number of the ways for n and k specified in the corresponding dataset. You may assume that it is less than 231.nnSample Inputnn24 3 n24 2 n2 1 n1 1 n4 2 n18 3 n17 1 n17 3 n17 4 n100 5 n1000 10 n1120 14 n0 0nSample Outputnn2 n3 n1 n0 n0 n2 n1 n0 n1 n55 n200102899 n2079324314

The Primes

02-11

问题描述 :nnnnn|---|---|---|---|---|nn| 1 | 1 | 3 | 5 | 1 |nn|---|---|---|---|---|nn| 3 | 3 | 2 | 0 | 3 |nn|---|---|---|---|---|nn| 3 | 0 | 3 | 2 | 3 |nn|---|---|---|---|---|nn| 1 | 4 | 0 | 3 | 3 |nn|---|---|---|---|---|nn| 3 | 3 | 3 | 1 | 1 |nn|---|---|---|---|---|nn(Figure 1)nnnnnFigure 1 shows a square. Each row, each column and the two diagonals can be read as a five digit prime number. The rows are read from left to right. The columns are read from top to bottom. Both diagonals are read from left to right. Write a program that constructs such squares:nnnnn The prime numbers must have the same digit sum (11 in the example).nnn The digit in the top left-hand corner of the square is pre-determined (1 in the example).nnn A prime number may be used more than once in the same square.nnn If there are several solutions, all must be presented.nnn A five digit prime number cannot begin with zeros, ie 00003 is NOT a five digit prime number. nnnn nn输入:nnnYour program is to read from standard input. First the digit sum of prime numbers and then the digit in the top left-hand corner of the square. The file contains two lines. There will always be a solution to the given test data. n输出:nnnYour program is to write to standard output. Output five lines for each solution found, where each line in turn consists of a five digit prime number. The solutions are sorted by the prime in the first row, then by the prime in the second row,etc. Output a blank line after each solution.n样例输入:nn11n1n样例输出:nn11351n14033n30323n53201n13313nn11351n33203n30323n14033n33311nn13313n13043n32303n50231n13331

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试

关闭