输入偶数分解成两个素数和

作者在 2011-08-26 12:10:59 发布以下内容
在论坛上看到的题目,自己试着做了一下
/*
时间:2011年8月24日12:07:02
功能:编程,任意输入一个偶数n,请将它分解为两个素数之和。输出形式为:* = * + *
目的:练习使用函数完成判断是否素数的功能
备注:论坛回帖
http://bbs.bccn.net/thread-348017-1-1.html 第1问
*/
# include <stdio.h>

bool IsPrime (int val)        //判断一个数是否素数,返回true或false
{
    int i;

    for (i=2; i<val; ++i)
    {
        if (val%i == 0)
            break;
    }
   
    if (i == val)
        return true;
    else
        return false;
}


int main(void)
{
    int j;      
    int m,n;
   
    do
    {
        printf("请输入一个大于2的偶数\n");
        scanf("%d",&j);
    } while (j%2 != 0 || j<2);
   
    for (m=2; m<=j/2; ++m)
    {
        if (IsPrime(m))
        {
            n = j-m;
            if (IsPrime(n))
                printf("%d = %d + %d\n",j,m,n);
        }
    }
   
    return 0;
}

/*
在VC++6.0中的输出结果为:
————————————
请输入一个大于2的偶数
8
8 = 3 + 5
Press any key to continue
————————————
*/
 
后来看到 32楼 坛友的代码更为简洁,模仿着改进一下
/*时间:2011年8月26日12:16:12*/

# include <stdio.h>

bool IsPrime (int val)        //判断一个数是否素数,返回true或false
{
    int i;

    for (i=2; i<val; ++i)
    {
        if (val%i == 0)
            break;
    }
    
    if (i == val)
        return true;
    else
        return false;
}


int main(void)
{
    int j;        
    int m,n;
    
    do
    {
        printf("请输入一个大于2的偶数\n");
        scanf("%d",&j);
    } while (j%2 != 0 || j<2);
    
    for (m=2; m<=j/2; ++m)
    {
        if (IsPrime(m) && IsPrime(j-m))                    //这里做了一点改进今后注意
                printf("%d = %d + %d\n",j,m,j-m);        
    }
    
    return 0;
}
发现自己总想不起来用逻辑运算符,以后注意
默认分类 | 阅读 2940 次
文章评论,共2条
循个
2011-08-29 14:54
1
怎么不能运行的
edwardflee(作者)
2011-08-29 15:06
2
<div class="quote"><span class="q"><b>循个</b>: 怎么不能运行的</span></div>可以呀
游客请输入验证码
最新评论