#include"stdio.h"
int main()
{
int a,b,c,d,k;
scanf("%d",&b);
if(b<=2||b%2!=0)
return 0;
if(b==4)
{
printf("4=2+2\n");
return 0;}
for(a=3;a<=b-1;a++)
{
for(c=2,d=0;c<=a-1;c++)
{
if(a%c!=0)
d++;
}
if(d==a-2)
{
k=b-a;
for(c=2,d=0;c<=k-1;c++)
{
if(k%c!=0)
d++;
}
if(d==k-2&&a<=k)
printf("%d=%d+%d\n",b,a,k);
// return 0;
}
}
}
題目描述
哥德巴赫猜想:任何大于2的偶數可以分成兩個素數之和(例如18=11+7),請驗證哥德巴赫猜想。 編程提示:設偶數為n,將n分解成n1和n2且n=n1+n2,顯然n1最大為n/2。 首先判斷n1是否為素數,如果是,再判斷n2是否為素數,如果是輸出n=n1+n2。
輸入格式:
輸入一個偶數。
輸出格式:
輸出n=n1+n2的形式,如果有多個,一行輸出一個。
輸入樣例:
在這里給出一組輸入。例如:
44
輸出樣例:
在這里給出相應的輸出。例如:
44=3+41
44=7+37
44=13+31
我怎么運行都是對的,就是提交不了pta,求解
uj5u.com熱心網友回復:
#include <stdio >#include <math >
int prime (int n)
{
int i;
for (i =2;i <sqrt(n);i ++)
if (n %i ==0) return 0;
return 1;
}
int main ()
{
int a,b,c,d,n;
printf (“請輸入一個偶數(n>3):”);
scanf (“%d”,&n);
if (n<3||n %2!=0)
printf (“該值不符合要求\n”);
else
{
for (a =2;a <=n/2;a ++)
{
b =n-a;
c= prime (a);
d =prime (b);
if (c==1 && d ==1)
printf (“%d = %d +%d \n”,n,a,b);
}
}
system (“pause”);
return 0;
}
uj5u.com熱心網友回復:
prime () 函式里,for (i =2;i <sqrt (n);i ++)筆誤,應改為:for (i =2;i <=sqrt (n);i ++),特此說明。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/227778.html
標籤:新手樂園
