الان دیدم! این سه تا عدد میتونن تکراری باشن دیگه؟ اگه نه گمونم صورت مساله اشکال داره! مثلا ۱۱ چی میشه؟به نقل از منجم! :بدون استفاده از آرایه،برنامه ای بنویسید که یک عدد بگیرد و 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;
}