讨论 / 茫茫题海中发现了这么一道水题,写下了丑陋的AC程序
世纪末的魔术师 2011-10-01 06:05:00
点我顶贴 收藏 删除
#include<iostream>

#include<cmath>

using namespace std;

int p[2501],k,i,j,q,n;

main(){

p[2]=1,k=1;

cin>>n;

memset(p,0,sizeof(p));

double t1,t2;

t1=(double)clock();

for(q=3;q<=2500;q++){

bool flag=true;

for(i=2;i<=long(sqrt(q));i++){

if(q%i==0){

flag=false;

break;

}

}

if(flag){

p[q]=1;

}

}

if(n>=4)

cout<<"4=2+2";

bool wr=false;

for(q=4;q<=n;q+=2){

bool flag=false;

for(i=2;i<=q&&!flag;i++)

if(p[i]==1&&p[q-i]==1)

cout<<endl<<q<<"="<<i<<"+"<<q-i,flag=true;

}

}

#1 vinence@2008-07-29 02:20:00
回复 删除

var

now,n,i:integer;

ok:shortint;

procedure try(k:integer);

var

j:integer;

begin

if k=2 then

begin

ok:=ok+1;

exit;

end;

for j:=2 to trunc(sqrt(k)) do

if k mod j = 0 then

exit;

inc(ok);

end;

begin

readln(n);

now:=2;

repeat

inc(now,2);

for i:=2 to (now div 2) do

begin

ok:=0;

try(i);

try(now-i);

if ok=2 then

begin

writeln(now,=,i,+,now-i);

break;

end;

end;

until now=n;

end.

#2 908630769@2011-03-01 01:25:00
回复 删除
- -||

楼主 和我同感啊 V5啊~~

#3 我为数学狂@2011-10-01 06:05:00
回复 删除
同感,我還有更簡練的

#include<iostream>

#include<cmath>

using namespace std;

bool pd(int x)

{

for(int i=2;i<=sqrt(x);i++)

if(x%i==0)

return 0;

return 1;

}

int n;

int main()

{

cin>>n;

for(int i=4;i<=n;i+=2)

for(int j=2;j<i;j++)

if(pd(j) && pd(i-j))

{cout<<i<<"="<<j<<"+"<<i-j<<endl;break;}

return 0;

}

#4 李安灏@2016-07-27 01:11:13
回复 删除
#include<stdio.h>

#include<math.h>

#include<iostream>

using namespace std;

int i,j,k,s,n,a[100005];

int main()

{

cin>>n;

k=(int)sqrt(n);

for(i=2;i<=k;i++)

{

for(j=2;j<=n/i;j++)

a[i*j]=1;

}

for(i=4;i<=n;i+=2)

{

for(j=2;j<=i/2;j++)

{

if(a[j]==0&&a[i-j]==0)

{

cout<<i<<'='<<j<<'+'<<i-j<<endl; break;

}

}

}

}

#5 李安灏@2016-07-27 01:11:35
回复 删除
#include<stdio.h>

#include<math.h>

#include<iostream>

using namespace std;

int i,j,k,s,n,a[100005];

int main()

{

cin>>n;

k=(int)sqrt(n);

for(i=2;i<=k;i++)

{

for(j=2;j<=n/i;j++)

a[i*j]=1;

}

for(i=4;i<=n;i+=2)

{

for(j=2;j<=i/2;j++)

{

if(a[j]==0&&a[i-j]==0)

{

cout<<i<<'='<<j<<'+'<<i-j<<endl; break;

}

}

}

}

查看更多回复
提交回复