证明任何一个数能表示成两个素数的和,通不过编译?prime判断一个数是否为素数。在gotbaha函数中调用prime

#include <iostream>
#include <cmath>
using namespace std;
int prime(int m);
int gotbaha(int a);
int main()
{
int num;
cin>>num;
int gotbaha(int);
int prime(int);
gotbaha(num);
return 0;
}
int gotbaha(int a)
{
int m,n;
for(n=m=a;m<=n;m++,n--)
if(prime(m)==1&&prime(n)==1)
cout>>a "=" n "+" m>>endl;
}
int prime(int m)
{
int k,i;
for(i=2;i<=k;i++)
if(m%i==0)
break;
if(i>k)
return 1;
else return 0;
}

#include <iostream>
#include <cmath>
using namespace std;
int prime(int m);
void gotbaha(int a);
int main()
{
int num;
cin>>num;
void gotbaha(int);
int prime(int);
gotbaha(num);
return 0;
}
void gotbaha(int a)
{
int m=0,n;
for(n=a-m;m<=n;m++,n--)
if(prime(m)==1&&prime(n)==1)
cout<<a<<"="<<n<<"+"<<m<<endl;
}
int prime(int m)
{
int i;
if(m==0 || m==1)
return 0;
for(i=2;i<m;i++)
if(m%i==0)
break;
if(i>=m)
return 1;
else
return 0;
}

//这是改好了的,你自己比较下不同吧
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-12-24
楼主的大体思路是正确的,但有些细节的东西没有弄好,我改了下你的代码,修改了几处buge,能正确运行
#include <iostream>
#include <cmath>
using namespace std;

int prime(int m)
{
int k = m;
int i;
for(i=2;i<k;i++)
if(m%i==0)
break;
if(i>=k)
return 1;
else
return 0;
}
int gotbaha(int a)
{
int m,n;
n = a-2;
m = 2;
for(;m<=n;m++,n--)
if((prime(m)==1) && (prime(n)==1))
{
cout<<a <<"=" <<n<< "+"<< m<<endl;
return 0;
}
}

int main()
{
int num;
cin>>num;
if(num < 4)
{
cout<<"输入数据太小,请输入大于等于4的数字!";
return -1;
}
gotbaha(num);
system("pause");
return 0;
}
第2个回答  2010-12-24
gotbaha中for(for(n=m=a;m<=n;m++,n--) 循环一次后m就永远大于n了,每次都只会执行一次
prime中K都没有赋值,就拿来用,还在for(i=2;i<=k;i++) if(i>k)做判断,肯定不能正常运行啊
第3个回答  2010-12-24
你的算法实现我没怎么细看
但是
第一、
int main()
{
int num;
cin>>num;
int gotbaha(int); //去掉
int prime(int); //去掉
gotbaha(num);
return 0;
}
第二、
gotbaha函数算法错误
第三、
cout>>a "=" n "+" m>>endl;
输出应该是cout<<
第四、
prime 函数里k的值都没有就在进行比较,大错特错
第五、
函数的参数最好改成指针
相似回答