
الان دیدم! این سه تا عدد میتونن تکراری باشن دیگه؟ اگه نه گمونم صورت مساله اشکال داره! مثلا ۱۱ چی میشه؟به نقل از منجم! :بدون استفاده از آرایه،برنامه ای بنویسید که یک عدد بگیرد و 3 عدد اول که مجموعشان برابر آن عدد میشود چاپ کند.

#include <stdio.h>
int prime(int n)
{
        int c;
        if (n < 2)
                return 0;
        for (c = 2; c < n; c++)
                if ((n % c) == 0)
                        return 0;
        return 1;
}
int maxprime(int max)
{
        int i, out;
        for(i = 2; i <= max; i++)
                if( prime( i ) )
                        out = i;
        return out;
}
int main()
{
        int t = 3, a, p;
        printf("Your number: ");
        scanf("%d", &a);
        if(a<6)
        {
                printf("Your number cannot be less than 6!\n");
                return 1;
        }
        printf("\n%d = ", a);
        while(t != 0)
        {
                t--;
                p = maxprime(a - 2 * t);
                printf("%d", p);
                if(t != 0)
                        printf(" + ");
                a = a - p;
        }
        printf("\n");
        return 0;
}
	

#include <stdio.h>
int p1, p2, p3, s1 = 0, s2 = 0, s3 = 0;
int prime(int n)
{
        int c;
        if (n < 2)
                return 0;
        for (c = 2; c < n; c++)
                if ((n % c) == 0)
                        return 0;
        return 1;
}
int maxprime(int input, int n)
{
        int i, t, s;
        if(n==1)
                s=s3;
        else if(n==2)
                s=s2;
        else if(n==3)
                s=s1;
        for(i = input - 2 * n + 2; i >= 2; i--)
                if( prime( i ) )
                {
                        t = i;
                        if(s==0)
                                break;
                        else if(n==1)
                                s--;
                        else if(n==2)
                                s--;
                        else if(n==3)
                                s--;
                }
        if(n == 3)
                p1 = t;
        else if(n == 2)
                p2 = t;
        else if(n == 1)
                p3 = t;
        if(n != 1)
                maxprime(input-t, n-1);
        else if(n == 1 && t != input)
        {
                if(p1 == 2)
                {
                        if(p2 == 2)
                        {
                                if(p3 == 2)
                                        return 1;
                                else
                                        s3++;
                        }
                        else
                                s2++;
                }
                else
                        s1++;
                maxprime(input+p1+p2, 3);
        }
        return 0;
}
int main()
{
        int input;
        printf("Your number: ");
        scanf("%d", &input);
        if(input<6)
        {
                printf("Your number cannot be less than 6!\n");
                return 1;
        }
        maxprime(input, 3);
        printf("%d = %d + %d + %d\n", input, p1, p2, p3);
        return 0;
}
	
#include <iostream>
#include <vector>
#include <cstdio>
using namespace std;
const int MAXN = 10*1000*1000 + 10;
int n;
bool isc[MAXN]; //isc[i] = Is i a composite number?
vector<int> prm;
void sieve()
{
	isc[1] = true;
	for(int i=2; i<=n; i++)
		if(!isc[i])
		{
			prm.push_back(i);
			for(int j=i; j<=n/i; j++)
				isc[j*i] = true;
		}
}
int main()
{
	scanf("%d", &n);
	sieve();
	for(int i=0; i<(n % 2 ? prm.size() : 1); i++)
		for(int j=i; j<prm.size(); j++)
		{
			int d = prm[i] + prm[j];
			if(d <= n && n-d >= prm[j] && !isc[n-d])
					printf("%d = %d + %d + %d\n", n, prm[i], prm[j], n - d);
		}
	return 0;
}
	
