| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3589 人关注过本帖
标题:[求助]一个偶数表示两个奇数之和。
只看楼主 加入收藏
suifengjita
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2006-10-12
收藏
得分:0 

#include<stdio.h>
int main()
{
int num1,num2,num3,zero;
int function1(int);
printf("enter in 3 even numbers(6<=num<=10000)and enter 0 to continue:");
scanf("%d%d%d",&num1,&num2,&num3);
scanf("%d",&zero);
while(1)
{if(zero==0)
break;
else
scanf("%d",&zero);}
function1(num1);
function1(num2);
function1(num3);

return 0;
}


void function1(int num)
{
int a,b,c,d,m,n;
int k=0,l=0;

for(a=3;a<=num-3;++a)
{
b=num-a;
k=0;
l=0;
for(c=2;c<a;++c)
{
m=a%c;
if(m!=0)
++k;
}
for(d=2;d<b;++d)
{
n=b%d;
if(n!=0)
++l;
}
if(k==a-2&&l==b-2)
break;
}
printf("%d=%d+%d\n",num,a,b);



}

2006-11-06 10:42
suifengjita
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2006-10-12
收藏
得分:0 

帮我检查一下,这个对了吗?
哈工大软件,唉,我差一点就和你报一个学校了
我也是大一的,以后多帮忙哦

你们怎么大一就出这样的题目

2006-11-06 10:44
zhanghuan_10
Rank: 1
等 级:新手上路
威 望:2
帖 子:751
专家分:0
注 册:2006-10-25
收藏
得分:0 
循环结束条件为(a<num/2);这里对吗?while(i*i<=a)
呵呵!楼上的同学!咱们都一样!共同进步嘛!

该学习了。。。
2006-11-06 18:27
zhanghuan_10
Rank: 1
等 级:新手上路
威 望:2
帖 子:751
专家分:0
注 册:2006-10-25
收藏
得分:0 
HIT-Online Judge,process result is Okey.
result has 50006 wrong answers.
对于第 31 楼的答案!呵呵!我们的电脑评判结果是这个!

该学习了。。。
2006-11-06 19:04
zhanghuan_10
Rank: 1
等 级:新手上路
威 望:2
帖 子:751
专家分:0
注 册:2006-10-25
收藏
得分:0 

如果我这样写的话就出现了超时!HIT-Online Judge,process result is Time limit exceed.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int sum(long a)
{
long i = 2;
while(i < a/2)
{
if(a%i==0)
{
return(0);
}
i++;
}
return(1);
}
int main()
{
long a, num;
while(EOF != (scanf("%ld", &num)) && num%2==0 && num!=0)
{
a = 3;
while(a < num/2)
{
if(sum(a)&&sum(num - a))
{
printf("%ld = %ld + %ld\n", num, a,num - a);
break;
}
a += 2;
}
}

return 0;
}


该学习了。。。
2006-11-06 19:09
zhanghuan_10
Rank: 1
等 级:新手上路
威 望:2
帖 子:751
专家分:0
注 册:2006-10-25
收藏
得分:0 
呵呵!版主做的是正确的!

该学习了。。。
2006-11-06 20:02
cl8899
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-11-7
收藏
得分:0 
nuciewth版主正解,只要a最小即可,所以即使a+b很大,循环次数也不会很多。
2006-11-07 12:01
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
以下是引用zhanghuan_10在2006-11-6 19:09:31的发言:

如果我这样写的话就出现了超时!HIT-Online Judge,process result is Time limit exceed.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int sum(long a) //原因是你这个素数判断就没有最优
{
long i = 2;
while(i *i< a)
{
if(a%i==0)
{
return(0);
}
i++;
}
return(1);
}
int main()
{
long a, num;
while(EOF != (scanf("%ld", &num)) && num%2==0 && num!=0)
{
a = 3;
while(a < num/2)
{
if(sum(a)&&sum(num - a))
{
printf("%ld = %ld + %ld\n", num, a,num - a);
break;
}
a += 2;
}
}

return 0;
}


倚天照海花无数,流水高山心自知。
2006-11-07 14:31
hithrhrhrhr
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-12-6
收藏
得分:0 

对于以上的题目感觉就是建立素数表,然后判断这个哈希表即可,题的考点就是求解素数的算法,依我个人之见,普通的算法计算素数的速度可能会超时,本人曾经用米勒算法跑了一遍素数表,但是超时了,后来想了一想,对于这道题可以把所需要的素数提出来即可,没必要作重复的计算,比方说已经计算出3是素数,那么2*3,3*3,4*3,等等就是没必要计算了,从而就节省了很多时间,如果要用楼上几位的算法那么就要全部计算了,会浪费很多时间,我认为会超时.
for(i=2;i<=500000;i++)
{
if(odd[i])
{
for(j=2;j<1000000/i;j++)
odd[i+j*i]=false;
}
}
这是我的代码,至于那句"Goldbach's conjecture is wrong." 就没必要了,歌德巴赫是不会错了,
歌德巴赫猜想支持者!!!!!
楼主加油呀,咱们工大的acm才刚刚起步,在成长之中,要靠我们努力提交,加油!!!!

2006-12-06 21:03
w362034710
Rank: 1
等 级:新手上路
帖 子:169
专家分:0
注 册:2006-12-2
收藏
得分:0 
# include<stdio.h>
# include<math.h>
int fflag(int n);
void main()
{
int i,j,n;
long max;
printf("\ninput the number: ");
scanf("%ld",&max);
for(i=4,j=0;i<=max;i+=2)
{
for(n=2;n<i;n++)
if(fflag(n))
if(fflag(i-n))
{
printf("%4d=%2d+%2d",i,n,i-n);
j++;
if(j==5)
{
printf("\n");
j=0;
}
break;
}
if(n==i) printf("error %d\n",i);
}
}
int fflag(int i)
{
int j;
if(i<=1) return 0;
if(i==2) return 1;
if(!(i%2)) return 0;
for(j=3;j<=(int)(sqrt((double)i)+1);j+=2)
if(!(i%j)) return 0;
return 1;
}
这个在一秒内
2006-12-06 23:23
快速回复:[求助]一个偶数表示两个奇数之和。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023046 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved