| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1098 人关注过本帖
标题:求助,小女子请各位帮个忙啦,,谢谢
只看楼主 加入收藏
聂文伟
Rank: 1
来 自:湖南娄底
等 级:新手上路
帖 子:15
专家分:2
注 册:2010-9-4
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:12 
求助,小女子请各位帮个忙啦,,谢谢
#include <stdio.h>
int isprime(int);
void even(int);
main()
{int a;
printf("enter a even number:");scanf("%d",&a);
if(a%2==0)
even(a);
else printf("the %d is not even number\n");
}
void even(int x)
{int i;
for(i=0;i<=x/2;i++)
if(isprime(i))                /*  判断其中一个是素数 */
if(isprime(x-i))             /*  判断另一个是素数 */
{printf("%d=%d+%d\n",x,i,x-i);return;}
}
int isprime(int a)
{int t;
for(t=2;t<=a/2;t++)
if(a%t==0)
return 0;
return 1;
}


题目是验证任意偶数为两个素数之和,并输出这两个素数。
这个程序是我自己编写出来的,但是结果总是1+(x-i)=x,
思考很久就是发现不了问题。请各位高手帮下忙,给一个详细的答案。
搜索更多相关主题的帖子: 小女子 
2010-09-05 22:11
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:1 
int isprime(int a)
{int t;
for(t=2;t<=a/2;t++)
if(a%t==0)
return 0;
return 1;
}
改成
int isprime(int a)
{int t;
if (a<2) return 0;
for(t=2;t<=a/2;t++)
if(a%t==0)
return 0;
return 1;
}

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2010-09-05 22:35
S_12s
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:110
专家分:670
注 册:2010-7-21
收藏
得分:1 
程序代码:
void even(int x)
{
    int i;
    for(i=0;i<=x/2;i++)
    {
        if(isprime(i))             

            if(isprime(x-i))           

            {
                printf("%d=%d+%d\n",x,i,x-i);
                //return;
            }
    }
}
int isprime(int a) 还可以优化……
2010-09-05 22:35
erikyo
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:270
专家分:1154
注 册:2010-6-10
收藏
得分:0 
#include <stdio.h>

int isprime(int);
void even(int);

main()
{
    int a;
    printf("enter a even number:");
    scanf("%d",&a);
    if(a%2==0)
        even(a);
    else
        printf("the %d is not even number\n");
}

void even(int x)
{
    int i;

    for(i=2;i<=x/2;i++)                //既然是判断素数,那就直接从2开始就是了,不需要从0开始。(从0开始,会影响结果)
    if(isprime(i))                /*  判断其中一个是素数 */
        if(isprime(x-i))             /*  判断另一个是素数 */
        {
            printf("%d=%d+%d\n",x,i,x-i);
            return;
        }
}

int isprime(int a)
{
    int t;

    for(t=2;t<=a/2;t++)            
    if(a%t==0)
        return 0;
    return 1;
}
2010-09-06 08:54
聂文伟
Rank: 1
来 自:湖南娄底
等 级:新手上路
帖 子:15
专家分:2
注 册:2010-9-4
收藏
得分:0 
从0开始就是错误的啦,因为最小的素数是啊,0和1不是素数啊,,,,,
2010-09-06 12:30
lucky563591
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:765
专家分:2103
注 册:2009-11-18
收藏
得分:0 
不是int代替void的
2010-09-07 07:01
lucky563591
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:765
专家分:2103
注 册:2009-11-18
收藏
得分:0 
不是int代替void的
2010-09-07 07:02
lxmuyu
Rank: 1
等 级:新手上路
帖 子:2
专家分:1
注 册:2010-9-7
收藏
得分:1 
#include <stdio.h>
int isprime(int);
void even(int);
main()
{
  int a;
  printf("enter a even number:");scanf("%d",&a);
  if(a%2==0)
    even(a);
  else printf("the %d is not even number\n");
}
void even(int x)
{
  int i;
  for(i=0;i<=x/2;i++)
    if(isprime(i))                /*  判断其中一个是素数 */
      if(isprime(x-i))             /*  判断另一个是素数 */
    {printf("%d=%d+%d\n",x,i,x-i);return;}
}
int isprime(int a)
{
  int t;
  if(a!=1)
    {
      for(t=2;t<=a/2;t++)
    if(a%t==0)
      return 0;
      return 1;
    }
  else
    return 0;
}
2010-09-07 09:17
manliuhui
Rank: 2
来 自:山东德州
等 级:论坛游民
帖 子:23
专家分:52
注 册:2009-7-25
收藏
得分:6 
小弟不才,但是我用楼主的代码在Dev-cpp上测试了一下,什么问题都没有,虽然我也觉得并不是最优算法,但是输出结果是没有错的。
程序代码:
[color=#0000FF]#include <stdio.h>
int isprime(int);
void even(int);
int main()
{int a;
printf("enter a even number:");scanf("%d",&a);
if(a%2==0)
even(a);
else printf("the %d is not even number\n",a);
getchar();getchar();
}
void even(int x)
{int i;
for(i=0;i<=x/2;i++)
if(isprime(i))                /*  判断其中一个是素数 */
if(isprime(x-i))             /*  判断另一个是素数 */
{printf("%d=%d+%d\n",x,i,x-i);}//我将return去掉,看看每个输出结果是否正确。都没问题。
}
int isprime(int a)
{int t;
for(t=2;t<=a/2;t++)//因为这里测试i就是t从2开始的,虽然多用了两次循环,但是都不符合条件被滤过了
if(a%t==0)
return 0;
return 1;
}
[/color]
2010-09-07 09:37
manliuhui
Rank: 2
来 自:山东德州
等 级:论坛游民
帖 子:23
专家分:52
注 册:2009-7-25
收藏
得分:1 
哎~~每次都是回了帖子,才发现自己的错误,1是没有滤过,御坂美琴为正解,提议循环条件为for(t=3;t<=a/2;t+=2)
2010-09-07 09:45
快速回复:求助,小女子请各位帮个忙啦,,谢谢
数据加载中...
 
   



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

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