Răspuns:
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("vuli.in");
ofstream fout("vuli.out");
bool prim(int num)
{
bool p=1;
if (num<2) p=0;
if (num==2) p=1;
if (num>2)
{
if (num%2==0) p=0;
for (int d=3; d*d<=num; d+=2)
if (num%d==0) p=0;
}
return p;
}
int sumaCif(long long num)
{
int s=0;
while (num)
{
s+=num%10;
num/=10;
}
return s;
}
long long k, i, j, P[41][41], suma;
int main()
{
fin >> k;
for(i = 0 ; i <= k ; i ++)
{
P[i][0] = P[i][i] = 1;
for(j = 1 ; j < i ; j ++)
P[i][j] = P[i-1][j-1] + P[i-1][j];
}
for (j=0; j<=k/2; ++j)
{
suma=sumaCif(P[k][j]);
if (suma==1 || prim(suma))
fout << P[k][j] << " ";
}
}
Explicație:
La sigur că sunt alte variante, dar aici nu s-a cerut mare efectivitate...