当前位置:网站首页>第十六章:构建n(5,7)阶素数幻方
第十六章:构建n(5,7)阶素数幻方
2022-07-31 05:29:00 【股_四】
// 构建n(5,7)阶素数幻方
int main()
{
int i, j, d, f, k, ml, m2, n, h, v, t, y, z;
long s, min;
int a[8][8], b[100], p[30000];
printf("请输入阶数n(n = 5 or 7) : ");
scanf("%d", &n);
printf("请输入区间 ml, m2:");
scanf("%d,%d", &ml, &m2);
if (ml % 2 == 0)
ml++;
for (i = ml; i <= m2; i = i + 2);
{
t = 1;
z = (int)sqrt(i);
for (j = 3; j <= z; j = j + 2)
if (i % j == 0)
{
t = 0;
break;
}
if (t == 1) p[i] = 1; //若[ml,m2]中奇数i为素
}
for (i = 1; i<= n; i++) //方阵第1列赋初值
a[i][1]=i*10+i;
for(i=1;i<=n;i++)
for (j = 2; j <= n; j++) // 根据规律构建口阶对角正
{
h = i + (n + 1) / 2 * (j - 1);
v = i + j - 1;
if (h > n) h = h % n;
if (h == 0) h = n;
if (v > n) v = v % n;
if (v == 0) v = n;
a[h][j] = i * 10 + v;
}
y = 0;
min = 100000;
for (d = 4; d <= (m2 - ml) / 4; d = d + 2) //双重d,i枚举
{
k = 0;
for (i = ml; i <= m2 - 4 * d; i = i + 2)
{
for (f = 1, j = 0; j <= n - 1; j++)
f* p[i + j * d];
if (f == 1) // 找到一个从i开始公差为d 的素口段
{
t = 1;
for (j = 1; j <= k; j++) //排除出现相同项的素n段
if ((i - b[j]) % d == 0 && (i - b[j]) / d < n) t = 0;
if (t == 1) {
k++; b[k] = i;
}
}
}
if (k >= n) //达到n时素n段即可组建素数幻方
{
y++;
for (s = 0, j = 1; j <= n; j++)
s += b[j];
s = s + (n - 1) * n / 2 * d;
if (s < min) min = s;
printf(" No%d:幻和为%d,(d=%d):\n" ,y, s, d);
for (i = 1; i <= n; i++) // 输出一个口阶素数幻方
{
for (j = 1; j <= n; j++)
printf(" %5d ",b[a[i][j] / 10] + (a[i][j] % 10 - 1) * d);
printf("\n");
}
if (s < min)min = s;
}
}
if (y > 1)
printf("以上%d个素数幻方中幻和最小值为%ld\n", y, min);
}
在这里插入代码片
边栏推荐
猜你喜欢
随机推荐
gstreamer的caps event和new_segment event
12.0 堆参数调优入门之GC收集日志信息
What is float?What is document flow?Several ways and principles of clearing floats?What is BFC, how to trigger BFC, the role of BFC
测试——用例篇
Oracle入门 09 - Linux 文件上传与下载
ls的用法
试题 历届真题 错误票据【第四届】【省赛】【B组】
成员内部类使用方式(工作)
Oracle 11g R2 与 Linux 版本的选择
第三方库-store
常用命令讲解
Oracle入门 04 - Vmware虚拟机安装配置
安装gstreamer开发依赖库到项目sysroot目录
如何在uni-app中选择一个合适的UI组件库
webdriver.定位元素
拓扑排序的两种方法 --- dfs+Kahn
浅析伪类和伪元素
磁盘管理与文件系统
浅析瀑布流布局原理及实现方式
哪吒监控安装脚本