搜索
查看: 1569|回复: 18
打印 上一主题 下一主题

验证哥德巴赫猜想的问题

[复制链接]
跳转到指定楼层
楼主
发表于 2015-8-12 09:30:00 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
#include <stdio.h>
#include <stdlib.h>
int main()
{
        int k,a,b,i,fa,fb;
    for(k=4;k<=100;k=k+2)
    {
                for(a=2;a<=k/2;a++)
                        {
                                fa=0;
                for(i=2;i<=a-1;i++)
                                        {
                                                if(a%i==0) {fa=1;break;}
                    }
                    if(fa==0)
                    {
                                                b=k-a;
                                                fb=0;
                                                for(i=2;i<=b-1;i++)
                                                {
                                                if(b%i==0) {fb=1;break;}
                                                }
                                                if(fb==0)
                                                {printf("%d=%d+%d\n",k,a,b);break;}
                                               
                    }
            }
    }              
        system("pause");
        return 0;
}
在for的循环过程中举个例及就是
for(k=4;k<=100;k=k+2)
                               {
                               for(a=2;a<=k/2;a++)
这里的k<=100成立后k=k+2=4+2=6
到下面a<=k/2这里的k值是4还是6?


还有for的循环优先顺序   每次for循环时的数值        求大神详解
{:soso_e149:}

最佳答案

查看完整内容

何必这么烦琐。。。。 [mw_shl_code=c,true]#include #include #include int prime(int n) { int i,f=1; if(n==2) return 1; if(n%2==0||n==1) return 0; else { for(i=3;i
沙发
发表于 2015-8-12 09:30:01 | 只看该作者
何必这么烦琐。。。。
[mw_shl_code=c,true]#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int prime(int n)
{
        int i,f=1;
    if(n==2)                        return 1;
    if(n%2==0||n==1)        return 0;
    else
    {
                for(i=3;i<=sqrt(n);i+=2)
        {
                        if(n%i==0)        {f=0;break;}
        }
        if(f==1) return 1;
        if(f==0) return 0;
    }
   
}
int main()
{       
    printf("歌德巴赫猜想:任何一个大于3的偶数都可以写成两个质数的和\n");
        printf("请输入一个偶数然后Enter\n");
        while(1)
    {
                int n,a,b,amount=0;
                scanf("%d",&n);
                for(a=2;a<=n/2;a++)
                {
               
                        if(prime(a))
                        {
                                b=n-a;
                if(prime(b))
                                {
                printf("%d=%d+%d\n",n,a,b);
                                amount++;
                }
                        }
                }   
                printf("总数=%d\n",amount);
                printf("\n");
    }
        system("pause");
        return 0;
}
[/mw_shl_code]
板凳
 楼主| 发表于 2015-8-12 09:51:40 | 只看该作者
已经被for搞晕了···{:soso_e134:}
地板
发表于 2015-8-12 14:00:08 | 只看该作者
for(k=4;k<=100;k=k+2)
                               {
                               for(a=2;a<=k/2;a++)
执行顺序是:k=4;k<=100成立;a=2;a<=50成立;执行内循环中的操作;a++;直到a=51跳出内循环;k=6;..........................
5#
发表于 2015-8-12 21:27:43 | 只看该作者
福华 发表于 2015-8-12 14:03
何必这么烦琐。。。。
[mw_shl_code=c,true]#include
#include

大神我拷贝编译了一下,算了下1亿以内的,现在真在运算!
估计得要6~7分钟的运算时间。
6#
发表于 2015-8-12 21:31:08 | 只看该作者
福华 发表于 2015-8-12 14:03
何必这么烦琐。。。。
[mw_shl_code=c,true]#include
#include

算完了
1亿以内一共有291400对奇数
7#
发表于 2015-8-13 08:49:21 | 只看该作者
skyhao0830 发表于 2015-8-12 21:31
算完了
1亿以内一共有291400对奇数

奇数????
8#
 楼主| 发表于 2015-8-13 09:34:16 | 只看该作者

不是a<=k/2吗?  怎么是a<=50 不是a<=2?
9#
发表于 2015-8-13 09:34:32 | 只看该作者
你的CPU倒是强大,1,0000,0000以内验证一下我的本本跑了30多分钟

艰难算完.PNG (5.87 KB, 下载次数: 12)

艰难算完.PNG
10#
发表于 2015-8-13 09:36:43 | 只看该作者

a<=2当然符合a<=50这个判断条件
11#
 楼主| 发表于 2015-8-13 09:49:13 | 只看该作者

我的意思是为什么k/2就是50      这个k是上面for的k<=100再除以2得来的吗?
12#
发表于 2015-8-13 09:54:07 | 只看该作者
Dear 发表于 2015-8-13 09:49
我的意思是为什么k/2就是50      这个k是上面for的k

对啊,不然呢
13#
 楼主| 发表于 2015-8-13 09:57:28 | 只看该作者

虽然我没看懂  但  谢谢
14#
 楼主| 发表于 2015-8-13 10:05:11 | 只看该作者

这是按照我的理解加的注释    你看以下对不对#include <stdio.h>
#include <stdlib.h>
int main()
{
        int k,a,b,i,fa,fb;
    for(k=4;k<=100;k=k+2)//第一次循环k=4 4<=100 成立进入下一循环
    {
                for(a=2;a<=k/2;a++)//a=2 2<=4/2  成立进入下一循环
                        {
                                fa=0;//fa赋值为0
                for(i=2;i<=a-1;i++)//i=2 2<=2-1 不成立 跳出循环
                                        {
                                                if(a%i==0) {fa=1;break;}
                    }
                    if(fa==0)//fa=0成立进入下一循环
                    {
                                                b=k-a;//b=4-2=2  
                                                fb=0;//fb赋值为0
                                                for(i=2;i<=b-1;i++)//i=2 2<=2-1  不成立 跳出循环
                                                {
                                                if(b%i==0) {fb=1;break;}
                                                }
                                                if(fb==0)//如果fb=0   成立  执行下面的输出语句
                                                {printf("%d=%d+%d\n",k,a,b);break;}//4=2+2
                                               
                    }
            }
    }              
        system("pause");
        return 0;
}
15#
发表于 2015-8-13 10:05:58 | 只看该作者
Dear 发表于 2015-8-13 09:57
虽然我没看懂  但  谢谢

慢慢来,会懂的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表