| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 579 人关注过本帖
标题:[求助]谁能帮我讲解一下这个程序。
只看楼主 加入收藏
trrysmo
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-5-25
结帖率:0
收藏
已结贴  问题点数:20 回复次数:6 
[求助]谁能帮我讲解一下这个程序。
#include <cstdio>

int prime(int now){
    for (int i=2; i<now; i++)
        if (now%i==0) return 0;
    return 1;
}

int main(){
    for (int i=6; i<=100; i++)
        if (!(i&1)){
           printf("%d=",i);
           for (int j=3; j<=(i>>1); j++)
               if (prime(j) && prime(i-j)){
                  printf("%d+%d\n",i-j,j);
                  break;
               }
        }
    return 0;
}
这是一个输出6到100间所有偶数可以写成两个素数的和的程序。哪位能帮我讲解一下每一步是什么意思?我会仔细揣摩的。   
搜索更多相关主题的帖子: 讲解 
2010-05-25 15:30
韩明海
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:253
专家分:749
注 册:2010-4-3
收藏
得分:5 
#include <cstdio>

int prime(int now){
    for (int i=2; i<now; i++)
        if (now%i==0) return 0;因为素数是不能被2---now-1的数整除的,如果整除了就不是素数,返回0,
    return 1;
}

int main()
{
    for (int i=6; i<=100; i++)
   
        if (!(i&1))    滤掉奇数
        {
           printf("%d=",i);
           for (int j=3; j<=(i>>1); j++)  把i分成两个数,那么j<=i/2就可以了这样i-j是大于i/2的,j就没有必要循环到i了.(i>>2==i/2)
            
                if (prime(j) && prime(i-j))判断分成的来那个个数是不是素数,如果不是素数,返回0 ,if失败,进行下一个计算
                {
                   printf("%d+%d\n",i-j,j);
                   break;
                 
             }
        }
   
    return 0;
}
2010-05-25 15:47
myhnuhai
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:3
帖 子:425
专家分:1725
注 册:2010-3-17
收藏
得分:5 
#include <cstdio>

int prime(int now){             //函数prime是用来判断是否是素数!
    for (int i=2; i<now; i++)
        if (now%i==0) return 0;  // 如果2到now之间有除数使的now%i==0,那么这个书不是素数,就返回0值;
    return 1;            //如果没有的话就返回1值;
}

int main(){
    for (int i=6; i<=100; i++)
        if (!(i&1)){   //在这里判断!(i&1),如果为真的话就执行if语句;
           printf("%d=",i);//打印i的值;
           for (int j=3; j<=(i>>1); j++)
               if (prime(j) && prime(i-j)){  //这里应用了prime函数;进行判断prime(j) && prime(i-j)为真的话,就执行if语句
                  printf("%d+%d\n",i-j,j);            //打印;
                  break;
               }
        }
    return 0;
}

不要让肮脏的记忆,迷失了原本纯洁的心灵!
2010-05-25 16:06
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:5 
同意楼上两位的说法。

南国利剑
2010-05-26 00:50
trrysmo
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-5-25
收藏
得分:0 
#include <stdio.h>
#include <math.h>

int sushu(int a)
{
    for (int i=2;i<a;i++)
        if (a%i==0) return 0;
        return 1;
}

int main()
{
    for (int i=6;i<=100;i++)
        if (i%2==0)     //我发现这一句其实可以省略。
        {
            for (int j=3;j<=(i/2);j++)
                if (sushu(j) && sushu(i-j))
                {
                    printf("%d=%d+%d\n",i,i-j,j);
                        break;
                }
        }
        return (0);
}

这个是我改的程序。谢谢楼上两位~
2010-05-27 07:20
韩明海
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:253
专家分:749
注 册:2010-4-3
收藏
得分:0 
不可以,因为要求是6到100之间的偶数,去掉的话奇数也被运算了
2010-05-28 12:27
yukun314
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:35
专家分:120
注 册:2010-4-18
收藏
得分:5 
说的都很详细了,我就没必要了
2010-05-29 10:34
快速回复:[求助]谁能帮我讲解一下这个程序。
数据加载中...
 
   



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

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