当前位置:首页 » 编程语言 » 素数环c语言

素数环c语言

发布时间: 2023-04-17 08:26:48

㈠ 素数环为20时有几种

㈡ 悬赏并跪求c语言大神帮忙解决此问题!关于素数环的

文件输入输出应该不用多说吧。
freopen("prime.in","r",stdin);
freopen("prime.out","w",stdout);
至于算法的话,就是暴力搜索加剪枝:
如果当前值与上一个值之和是一个素数才继续向下搜索销扰
用一个stack[N]记录数字
深搜过程:
void dfs(int depth)
{
if (depth>n)
{
if (judge(stack[1]+stack[n]))
{
for (int i=1;i<=n;++i)
printf("%d ",stack[i]);
printf("\n");
}
return ;
}
for (int i=1;i<=n;i++)
if (!flag[i] && judge(stack[depth-1]+i))
{
stack[depth]=i;
flag[i]=1;
dfs(depth+1);
flag[i]=0;
}
}
判断素数
bool judge(int N) //返回0为不是素数,返回1为是素数
{
if (N<2) return 0;
for (int i=2;i<=(int)sqrt(N);++i)
if (N%i) return 0;
return 1;
}
最后注意一点,在执行dfs过程时直接dfs(2),然后令stack[1]=1;因为当stack[1]>桐斗塌1之时,它的解可以由stack[1]=1时的解变换而来。flag[i]是记录该数出现过没有,因为每局圆个数只能出现一次。

㈢ C语言 素数环问题

prime函数里,把条件判断x/y改为x%y
其它我没细看,有问题再告诉我吧。

㈣ c语言素数环问题求改错,不要其他代码就帮我改一下

不清楚你是要求1-20所有长度的素数环还是要求长度为20的所有素数环

按照后者枯猛给贺漏你改了一版程序出来

需要注意的有两点

一个是由于要递归尝试下一个数值,所以用来存结果的数组必须要作为参数传进去

另一个 必须有一个数组作为标志 表示哪些数用过 因为1-20是不能重复使用的

最后说明一下 在你这个基础上改出来的是求长度为20的所有素数环 这是一个相当大的数量

截止回答时 我的机器还在继续往出打印

如果想只求出一组就退出运行 可以把search中n==20判断里面的return 改成exit(0) (注意要添加stdlib头文件)

代码如下

#include<stdio.h>
intsushu(inti);
voidsearch(inta[],intb[],intn);
//目测程序功能为求长度为20的素数环
inta[21];
intb[21];//用来标记某个数是否被用过

voidmain()
{inti;
//for(i=1;i<21;i++)//如果只是寻没拍桥找固定的20个数,那么没必要循环
a[0]=b[0]=1;
search(a,b,1);//由于需要递归所以要把数组做为参数
// printf("result: ");//结果在search中输出

}
voidsearch(inta[],intb[],intn)
{intj,k,t;
if(n==20)
{
if(sushu(19))
{
for(j=0;j<20;j++)
printf("%d",a[j]);
printf(" ");
}
return;//只打印一组的话这里改成exit(0);
}

for(k=1;k<21;k++)
{
if(b[k]==1)continue;//数字k+1已用

a[n]=k+1;
b[k]=1;
if(sushu(n-1))
search(a,b,n+1);
b[k]=0;
}
}
intsushu(inti)
{
intj,b;
if(i==19)
a[20]=a[0];
for(j=2;j<a[i]+a[i+1];j++)
{b=(a[i]+a[i+1])%j;
if(b==0)
return0;}
if(a[i]+a[i+1]==j)
return1;

}

㈤ C语言素数环问题:输入n,输出n以内的素数环。我感觉思路是对的,怎么没有输出,请大侠看看!

#include<stdio.h>
#include<string.h>
int is_prime(int x)
{
int i,flag;
for(i=2;i<=x/2;i++)
if(x%i==0)
return 0;
return 1;
}
void dfs(int n,int *a,int *isp,int *vis,int cur)
{
if(cur==n&&isp[a[0]+a[n-1]])
{
for(int i=0;i<n;i++)
printf("%d ",a[i]);
printf("\n");
return ;
}
else
for(int i=1;i<=n;i++)
if(!vis[i]&&isp[i+a[cur-1]])//如果i没有袭差悔庆凯用过,并且与前一个数之和为素数拍正
{
a[cur]=i;
vis[i]=1;
dfs(n,a,isp,vis,cur+1);
vis[i]=0;
}
}
int main()
{ int i,n,a[100],isp[100],vis[100];
memset(vis,0,sizeof(vis));
memset(isp,0,sizeof(isp));
scanf("%d",&n);
for(i=0;i<n;i++)
a[i]=i+1;
for(i=1;i<100;i++)
isp[i]=is_prime(i);
dfs(n,a,isp,vis,0);
return 0;
}
判断素数有问题

热点内容
linuxisthisok 发布:2025-07-13 14:12:13 浏览:160
sql查询分析器下载 发布:2025-07-13 14:07:45 浏览:52
怎么设置网络与计算机配置同步 发布:2025-07-13 14:01:39 浏览:449
jsp查询数据库显示 发布:2025-07-13 14:01:37 浏览:190
winrar解压慢 发布:2025-07-13 13:57:26 浏览:741
我的世界新手区服务器 发布:2025-07-13 13:50:52 浏览:953
M视频压缩 发布:2025-07-13 13:50:04 浏览:210
润享wifi密码是多少 发布:2025-07-13 13:49:48 浏览:612
九宫格抽奖源码 发布:2025-07-13 13:48:11 浏览:762
androidzip安装 发布:2025-07-13 13:35:24 浏览:10