ZJGSU 2019 三阶素数幻方

描述

通常的n阶幻方由1,2,3,4,...,n^2填入构成。而素数幻方全是由素数构成的各行、各列与两对角线之和均相等的方阵。

试在一般区间[c,d]找出9个素数,构成一个三阶素数幻方,使得该方阵中3行、3列与两对角线上的3个数之和均相等。最后统计出素数幻方的个数。注意,一个素数幻方转置后仍就是素数幻方,但不再计入总数。

规定:幻方中不存在重复的数字!

例如,c=100,d=400,那么区间[100,400]内的素数幻方共有2个,分别是:

No.1:

137     353     191

281     227     173

263     101     317

No.2:

173     359     257

347     263     179

269     167     353

输入

输入正整数c和d(c<d,且d<=2000)。

输出

输出区间[c,d]内的素数幻方个数。

输入样例 1  点击复制

50,500

输出样例 1

共8个素数幻方
#include<stdio.h>
#include<string.h>
#include<math.h>

int pan[4000]={0};
int su[1000]={0};
int cnt=0;

int main()
{
    pan[0]=pan[1]=1;
    for (int i=2;i<=4000;i++)
    {
        if (!pan[i])
        {
            su[cnt]=i;
            cnt++;
        }
        for (int j=0;i*su[j]<=4000 && j<cnt;j++)
        {
            pan[i*su[j]]=1;
            if (i%su[j]==0)
            {
                break;
            }
        }
    }
    int c=0;
    int d=0;
    int sum=0;
    scanf("%d,%d",&c,&d);
    for (int i=c;i<=d;i++)
    {
        if (pan[i])
        {
            continue;
        }
        for (int y=2;y<=i-3;y++)
        {
            for (int x=y+2;x<=i-3;x++)
            {
                if (x==2*y)
                {
                    continue;
                }
                int z=x-y;
                int w=x+y;
                if (i-w<c || i+w>d)
                {
                    continue;
                }
                if (pan[i-x] || pan[i+x] || pan[i+z] || pan[i-z] || pan[i+y] || pan[i-y] || pan[i+w] || pan[i-w])
                {
                    continue;
                }
                else
                {
                    sum++;
                }
            }
        }
    }
    printf("共%d个素数幻方\n",sum);
}

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值