素数环问题

elegant87 2010-03-17 03:41:00

//把从1—20这20个数摆成一个环,要求相邻的两个数的和是一个素数

#include <stdio.h>
#include <math.h>

int data[21];

void Init();
void Search(int num);
int IsPrime(int num);
void PrintResult();
void Swap(int &a,int &b);

int main()
{
Init();
Search(2);
return 0;
}

void Init()
{
int i;
for(i=1;i<=20;++i)
data[i]=i;
}

void Search(int num) //在这个函数里出现死循环
{
int i;
if(num>=20)
PrintResult();
else
{
for(i=num;i<=20;++i)
{
Swap(data[num],data[i]); //向前
if(IsPrime(data[num-1]+data[num]))
Search(num+1);
Swap(data[i],data[num]); //恢复
}
}
}

int IsPrime(int num)
{
int i, n=(int)sqrt(num);
for(i=2;i<=n;++i)
if(num%i==0)
return 0;
return 1;
}

void PrintResult()
{
int i;
for(i=1;i<=20;++i)
{
printf("%4d",data[i]);
if(i%10==0)
printf("\n");
}
}

void Swap(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}
...全文
328 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jixingzhong 2010-03-17
  • 打赏
  • 举报
回复
穷举吧。。。。。。
elegant87 2010-03-17
  • 打赏
  • 举报
回复
这么多啊!好的!我试试看!
huanmie_09 2010-03-17
  • 打赏
  • 举报
回复
据说有6309300个解。
在我机子上跑了几分钟还没打印完。
楼主可以加个全局变量:
int count = 0;

然后将打印输出函数改为:
void PrintResult()
{
int i;
for(i=1;i<=20&&count<100;++i)
{
printf("%4d",data[i]);
if(i%10==0)
printf("\n");
}
count++;
}
可以看到前100组结果.

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧