1
#include<stdio.h>
2
#include<string.h>
3
char a[40010];
4
int b[5000],c[5000];
5
int main()
6![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
{
7
int i, j, n, t, l1, l2,f;
8
memset(a, 1, sizeof(a));
9
memset(b, 0, sizeof(b));
10
for(i = 2;i <= 200;i++)
11
if(a[i])
12![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
13
t = 40000/i;
14
for(j = 2;j <= t;j++) a[i * j] = 0;
15
}
16
t = 0;
17
for(i = 2;i <= 40000;i++)
18
if(a[i])
19![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
20
b[t] = i;
21
n=i;
22
c[t]=0;
23
while(n)
24![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
25
c[t]+=n%10;
26
n/=10;
27
}
28
t++;
29
}
30
//printf("%d\n",c[0]);
31
while(scanf("%d",&n),n)
32![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
33
while(n++)
34![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
35
i=0;f=0;
36
while(b[i]*b[i]<=n)
37![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
38![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(n%b[i++]==0)
{f=1;break;}
39
}
40
if(f==0)continue;
41
i=0;t=n;l1=0;l2=0;
42
while(t)
43![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
44
l1+=t%10;
45
t/=10;
46
}
47
t=n;i=0;
48
while(b[i]*b[i]<=t)
49![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
50
while(t && t%b[i]==0)
51![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
52
l2+=c[i];
53
t/=b[i];
54
}
55
i++;
56
}
57
// printf("%d %d\n",t,n);
58
if(t>1)
59
while(t)
60![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
61
l2+=t%10;
62
t/=10;
63
}
64
//printf("%d %d %d\n",n,l1,l2);
65
if(l1==l2)break;
66
}
67
printf("%d\n",n);
68
}
69
return 0;
70
}
71![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
72![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
先把20000以内的质数都求出来
然后枚举每一个数把它变成质数的和然后把那个数字自己也拆分就可以了就是一个简单的枚举和模拟。