c++新手求助,验证哥德巴赫猜想

一点不剩 2013-11-26 10:42:47
题目要求建立一个判断素数的函数is_prime
我的程序编写后输出数值中还是有非素数,一下子找不出哪里错了,刚学c++,求高手帮我检查下。
#include<iostream>
using namespace std;
bool is_prime(long int a)
{
long int x=1;
for(;x<=(a/2);x++)
{
if (a%x==0)
{
return 1;
break;
}


if (x>=(a/2)) return 0;

else return 1;
}
}
int main()
{
int x,y,z;
cout<<"请输入一个大于2的偶数:";
cin>>x;
if (x%2!=0||x<2)
{
cout<<"输入的数据有误";
}
else
{ cout<<"可以分解为以下两个素数相加的情况:"<<endl;
for (y=2;is_prime(y)&&y>0;y++)
if (x-y>0&&is_prime(x-y))

cout<<y<<" "<<x-y<<endl;
}

return 0;
}
...全文
768 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
www_adintr_com 2013-11-27
  • 打赏
  • 举报
回复
引用 2 楼 u012393083 的回复:
感谢楼上的坛友,我已修改,还有就是我还想问一下,我这个程序只能输出一组情况,比如8分解为两个素数相加,只能得到3+5,如果我想得到它所有的分解方法应该如何修改下
is_prime(y) 不要放在 for 循环里面作为条件, 放到 if 里面去。
一点不剩 2013-11-26
  • 打赏
  • 举报
回复
感谢楼上的坛友,我已修改,还有就是我还想问一下,我这个程序只能输出一组情况,比如8分解为两个素数相加,只能得到3+5,如果我想得到它所有的分解方法应该如何修改下
www_adintr_com 2013-11-26
  • 打赏
  • 举报
回复
1. 循环从 2 开始, 不要从 1 开始. 2. return 1; 后面跟 break; 没有意义, 不会被执行到. 3. 能整出的就不是素数, if (a%x==0) 后面应该 return 0, 不是 return 1; 4. if (x>=(a/2)) ... else ... 这是要干啥? 这样 return 后 for 循环也没有任何意义了. 修改后的:

bool is_prime(long int a)
{  
	long int x=2;
	for(;x<=(a/2);x++)
	{
		if (a%x==0)
		{
			return 0;
		}
	}

	return 1;
}

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧