求大于等于6的任意偶数,以素数+素数形式输出

Mr_XXVitaa 2016-11-02 05:09:26
#include<stdio.h>
int main()
{
int n, a, b, i;
printf("请输入一个正偶数:\n");
while (scanf("%d",&n)==1)
{
if (n%2==0&&n>=0)
{
if (n!=2)
{
printf("该正偶数可以拆分为:\n");
for (a=2;a<=n/2;a++) /*每一个进行判断*/
{
for (i=2;i<=a/2;i++) /*类似求1000以内素数,输入一个数,判断这里面符合条件的。*/
if (a%i==0)
break;
if (i==a/2+1)
{
for (i=2,b=n-a;i<=b/2;i++)
if (b%i==0)
break;
if (i==b/2+1)
printf("%d+%d\n",a,b);
}
}
}
else
{
printf("2是素数不能拆分\n");
}

}
else
{
printf("输入的数不是正偶数\n");
}
}

return 0;
}







请问 这里面 if()里面,为什么 那样表示
...全文
328 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mr_XXVitaa 2016-11-03
  • 打赏
  • 举报
回复
引用 5 楼 paschen的回复:
[quote=引用 4 楼 qq_36370998 的回复:] [quote=引用 2 楼 小灸舞的回复:]因为if (i == a / 2 + 1)前面的for循环是从2循环到<=n/2的 当for循环结束后(没有被break)i是刚好等于a / 2 + 1的(也就意味着a是素数) 然后后一个for循环,让b=n-a后,继续判断,如果for执行完了(没有被break),意味着b也是素数(此时i == b / 2 + 1) 就可以输出a和b了
亲, 还是有点不懂。。 假设我输入8 开始执行,a=2,a<=4,继续执行下一个for. i=2,但是i<=1不成立。 回去让a加1,a变成3,还是不行,a变成4,可以符合要求执行第二个for. 然后a%i=0。。就break了,返回执行第一个a++,变成了5,再次执行第二个for 然后可以。就让5%2。。可以输出。。。 问题来了,后面的那个i=a/2+1 不符合??哪里错了。。。[/quote] 不懂你意思,为何不单步跟踪程序运行,每步观察程序各参数变化情况[/quote] 怎么单步跟踪运行? 假设输入8 这个程序具体怎么运行的?能手写一下吗? 其实,不懂就在那个a++ i++ 有点晕。
paschen 2016-11-02
  • 打赏
  • 举报
回复
引用 4 楼 qq_36370998 的回复:
[quote=引用 2 楼 小灸舞的回复:]因为if (i == a / 2 + 1)前面的for循环是从2循环到<=n/2的 当for循环结束后(没有被break)i是刚好等于a / 2 + 1的(也就意味着a是素数) 然后后一个for循环,让b=n-a后,继续判断,如果for执行完了(没有被break),意味着b也是素数(此时i == b / 2 + 1) 就可以输出a和b了
亲, 还是有点不懂。。 假设我输入8 开始执行,a=2,a<=4,继续执行下一个for. i=2,但是i<=1不成立。 回去让a加1,a变成3,还是不行,a变成4,可以符合要求执行第二个for. 然后a%i=0。。就break了,返回执行第一个a++,变成了5,再次执行第二个for 然后可以。就让5%2。。可以输出。。。 问题来了,后面的那个i=a/2+1 不符合??哪里错了。。。[/quote] 不懂你意思,为何不单步跟踪程序运行,每步观察程序各参数变化情况
Mr_XXVitaa 2016-11-02
  • 打赏
  • 举报
回复
引用 2 楼 小灸舞的回复:
因为if (i == a / 2 + 1)前面的for循环是从2循环到<=n/2的
当for循环结束后(没有被break)i是刚好等于a / 2 + 1的(也就意味着a是素数)
然后后一个for循环,让b=n-a后,继续判断,如果for执行完了(没有被break),意味着b也是素数(此时i == b / 2 + 1)
就可以输出a和b了
亲, 还是有点不懂。。 假设我输入8 开始执行,a=2,a<=4,继续执行下一个for. i=2,但是i<=1不成立。 回去让a加1,a变成3,还是不行,a变成4,可以符合要求执行第二个for. 然后a%i=0。。就break了,返回执行第一个a++,变成了5,再次执行第二个for 然后可以。就让5%2。。可以输出。。。 问题来了,后面的那个i=a/2+1 不符合??哪里错了。。。
Mr_XXVitaa 2016-11-02
  • 打赏
  • 举报
回复
for (a=2;a<=n/2;a++) { for (i=2;i<=a/2;i++) if (a%i==0) break; 这ge 输入 n=6 shi,a<=3 可以循环, 往后呢?
小灸舞 版主 2016-11-02
  • 打赏
  • 举报
回复
因为if (i == a / 2 + 1)前面的for循环是从2循环到<=n/2的
当for循环结束后(没有被break)i是刚好等于a / 2 + 1的(也就意味着a是素数)
然后后一个for循环,让b=n-a后,继续判断,如果for执行完了(没有被break),意味着b也是素数(此时i == b / 2 + 1)
就可以输出a和b了
Mr_XXVitaa 2016-11-02
  • 打赏
  • 举报
回复
if (i==b/2+1) if (i==a/2+1) 就是这几句作用??

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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