| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1403 人关注过本帖
标题:三阶素数幻方
取消只看楼主 加入收藏
傻瓜菜
Rank: 2
来 自:earth
等 级:论坛游民
帖 子:73
专家分:66
注 册:2011-10-4
结帖率:94.44%
收藏
已结贴  问题点数:20 回复次数:4 
三阶素数幻方
程序代码:
#include<stdio.h>
int isprime(int i);
int main()
{
    int i,n,m,j,a[305],x1,x2,x3,x4,x5,x6,x7,x8,x9,cha_1,cha_2,sum;
    scanf("%d,%d",&m,&n);
    j=0;
    for(i=m;i<=n;i++)
    {
        if(isprime(i))
        {
            a[j]=i;j++;
        }
    }
    if(j<=10) printf("0");
    else
    {
        sum=0;
        for(x1=0;x1<j-8;x1++)
        {
            for(x2=x1+1;x2<j-7;x2++)
            {
                cha_1=a[x2]-a[x1];
                for(x3=x2+1;x3<j-6;x3++)
                {
                    if(a[x3]-a[x2]<cha_1) continue;
                    if(a[x3]-a[x2]>cha_1) break;
                    for(x4=x3+1;x4<j-5;x4++)
                    {
                        cha_2=a[x4]-a[x3];
                        for(x5=x4+1;x5<j-4;x5++)
                        {
                            if(a[x5]-a[x4]<cha_1) continue;
                            if(a[x5]-a[x4]>cha_1) break;
                            for(x6=x5+1;x6<j-3;x6++)
                            {
                                if(a[x6]-a[x5]<cha_1) continue;
                                if(a[x6]-a[x5]>cha_1) break;
                                for(x7=x6+1;x7<j-2;x7++)
                                {
                                    if(a[x7]-a[x6]<cha_2) continue;
                                    if(a[x7]-a[x6]>cha_2) break;
                                    for(x8=x7+1;x8<j-1;x8++)
                                    {
                                        if(a[x8]-a[x7]<cha_1) continue;
                                        if(a[x8]-a[x7]>cha_1) break;
                                        for(x9=x8+1;x9<j;x9++)
                                        {
                                            if(a[x9]-a[x8]<cha_1) continue;
                                            else if(a[x9]-a[x8]>cha_1) break;
                                            else sum++;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        printf("%d",sum);
    }
    return 0;
}
int isprime(int i)
{
    int ok,t;
    for(t=2;t<=i/2;t++)
    {
        if(i%t==0)
        {
            ok=0;
            break;
        }
        else
            ok=1;
    }
    return ok;
}#include<stdio.h>
int isprime(int i);
int main()
{
    int i,n,m,j,a[305];
    scanf("%d,%d",&m,&n);
    j=0;
    for(i=m;i<=n;i++)
    {
        if(isprime(i))
        {
            a[j]=i;
            j++;
        }
    }
}
int isprime(int i)
{
    int ok,t;
    for(t=2;t<=i/2;t++)
    {
        if(i%t==0)
        {
            ok=0;
            break;
        }
        else
            ok=1;
    }
    return ok;
}



问题是:在闭区间a到b中找出九个素数,使它们构成3*3方阵(三行三列与两对角线上的三个数字和均相等)。
我的思路是:将九个数(x1,x2,x3,x4,x5,x6,x7,x8,x9)从小到大排(找素数的时候排好了),发现(x2-x1=x3-x2=x5-x4=x6-x5=x8-x7=x9-x8)并且(x4-x3=x7-x6)所以用了九个循环,但是根据示例,50到500的闭区间应该有八个这样的方阵,我程序只算出来七个,这是什么问题?求解答!!!(注:100到400之间有两个这样的方阵,这是对的)。
2011-12-06 08:58
傻瓜菜
Rank: 2
来 自:earth
等 级:论坛游民
帖 子:73
专家分:66
注 册:2011-10-4
收藏
得分:0 
回复 3楼 qwermy
谢谢。不过再问一句,是不是不存在我说的规律?
2011-12-07 16:59
傻瓜菜
Rank: 2
来 自:earth
等 级:论坛游民
帖 子:73
专家分:66
注 册:2011-10-4
收藏
得分:0 
回复 5楼 miko54790480
54790480是你吗?
2011-12-07 18:44
傻瓜菜
Rank: 2
来 自:earth
等 级:论坛游民
帖 子:73
专家分:66
注 册:2011-10-4
收藏
得分:0 
谢谢三楼,弄好了!
2011-12-07 19:36
傻瓜菜
Rank: 2
来 自:earth
等 级:论坛游民
帖 子:73
专家分:66
注 册:2011-10-4
收藏
得分:0 
回复 9楼 miko54790480
程序代码:
#include<stdio.h>
int isprime(int i);
int main()
{
    int i,n,m,j,a[305],x1,x2,x3,x4,x5,x6,x7,x8,x9,totle,sum;
    scanf("%d,%d",&m,&n);
    j=0;
    for(i=m;i<=n;i++)
    {
        if(isprime(i))
        {
            a[j]=i;j++;
        }
    }
    totle=0;
    for(x1=0;x1<j-8;x1++)
    {
        for(x2=x1+1;x2<j-7;x2++)
        {
            for(x3=x2+1;x3<j-6;x3++)
            {
                for(x4=x3+1;x4<j-5;x4++)
                {
                    for(x5=x4+1;x5<j-4;x5++)
                    {
                        for(x6=x5+1;x6<j-3;x6++)
                        {
                            if(a[x4]+a[x6]>a[x5]*2) break;
                            if(a[x4]+a[x6]<a[x5]*2) continue;
                            for(x7=x6+1;x7<j-2;x7++)
                            {
                                if(a[x3]+a[x7]>a[x5]*2) break;
                                if(a[x3]+a[x7]<a[x5]*2) continue;
                                for(x8=x7+1;x8<j-1;x8++)
                                {
                                    if(a[x2]+a[x8]>a[x5]*2) break;
                                    if(a[x2]+a[x8]<a[x5]*2) continue;
                                    for(x9=x8+1;x9<j;x9++)
                                    {
                                        if(a[x1]+a[x9]>a[x5]*2) break;
                                        if(a[x1]+a[x9]<a[x5]*2) continue;
                                        else
                                        {
                                            sum=a[x1]+a[x5]+a[x9];
                                            if(a[x1]+a[x6]+a[x8]==sum&&a[x2]+a[x4]+a[x9]==sum)
                                                if(a[x2]+a[x7]+a[x6]==sum&&a[x3]+a[x4]+a[x8]==sum)
                                                    totle++;
                                            if(a[x3]+a[x4]+a[x8]==sum&&a[x2]+a[x6]+a[x7]==sum)
                                                if(a[x1]+a[x7]+a[x8]==sum&&a[x3]+a[x9]+a[x2]==sum)
                                                    totle++;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    printf("共%d个素数幻方",totle);
    return 0;
}
int isprime(int i)
{
    int ok,t;
    for(t=2;t<=i/2;t++)
    {
        if(i%t==0)
        {
            ok=0;
            break;
        }
        else
            ok=1;
    }
    return ok;
}
不好意思,迟了
2011-12-08 16:39
快速回复:三阶素数幻方
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.053967 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved