Chinaunix首页 | 论坛 | 博客
  • 博客访问: 140980
  • 博文数量: 66
  • 博客积分: 1571
  • 博客等级: 上尉
  • 技术积分: 715
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-24 22:55
文章分类

全部博文(66)

文章存档

2012年(66)

我的朋友

分类: C/C++

2012-07-11 14:48:54

每个不小于6的偶数都能表示为2个素数之和,请在6-100,000之间的数值,用任意一种语言实现,一个
偶数有多种表示形式,输出一种即可

#include
#include
using namespace std;
 
void Judge(int num);
bool Show(int m,int n);
 int main()
 {
  int num;
 
  while(1)
  {
  printf("please input the number:\n");
  cin>>num;
        //scanf("num=%d",&num);  //用scanf输入,程序死循环不知道为什么
        if(num<6||num>100000)
          {
           printf("wrong nnmber,input again!\n");
             }
           else
                  break;
     }
  Judge(num);
   return 0;
 }
void Judge(int num)   //判定函数
 {
  int i,j;
  bool Juflag=true;
  for(int i=6;i  {
   for(j=1;j   {
     Juflag=Show(j,i-j); //对2个加数进行判断
     if(!Juflag)        // 如果找到2个素数则循环退出
      break; 
   }
  }
 }
bool Show(int m,int n) //进一步判定和输出函数
 {
  int t,k;
  bool flag=true;
  bool shflag=true;
  for(t=2;t  {
   if(m%t==0)
   {
    flag=false;
    break;
        }      
  }
  if(flag)    //如果上一个数是素数 继续判断下一个
  {
   for(k=2;k      {
    if(n%k==0)
     {
      shflag=false;
     break;
          }
     }
     if(shflag)     //如果2个都是素数,则显示并且设置循环标志
     {
      printf("一个素数=%d\t,另一个=%d\n",m,n);
      return false;
        } 
  }
  return true;
 }

有更简单的方法吗,请路过的高手指教
阅读(962) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~