• 20项素数和环——递归


    题目:

         把n个正整数围成一个环,如果环中所有相邻的两个数之和都是一个素数,该环称为一个n项素数和环

         对于指定的n,构造并输出所有不同的素数和环。

    设计要点:

         设置a数组在前n个正整数中取值,为避免重复输出,约定第1个数字a[1]=1;

         设置数组b标记奇素数。对指定的正整数n,首先要用试商判别法,把2n范围内的奇素数标记为1,例如b[7]=1表明7为奇素数。

    #include<stdio.h>
    #include<math.h>
    int n,a[2000],b[1000];long s=0;
    void main()
    { int t,j,k;
    int p(int k);
      printf("   前n个正整数组成素数环,请输入整数n: "); 
      scanf("%d",&n);  
      for(k=1;k<=2*n;k++) 
    b[k]=0;
      for(k=3;k<=2*n;k+=2)
         {for(t=0,j=3;j<=sqrt(k);j+=2)
             if(k%j==0)
                {t=1;break;}
    		 if(t==0) b[k]=1;            // 奇数k为素数的标记  
    	  }
      a[1]=1;k=2;//确定初始值
      p(k);
      printf("   前%d个正整数组成素数环,以上是其中3个。
    ",n); 
    }
     // 素数环递归函数p(k)  
    #include <stdio.h>
    int p(int k)
    { int i,j,u;
      if(k<=n)
        { for(i=2;i<=n;i++)     
           { a[k]=i;            // 探索第k个数赋值i  
             for(u=0,j=1;j<=k-1;j++)
    		        if(a[k]==a[j] || b[a[k]+a[k-1]]==0)  //  若出现重复数字  
    u=1;        // 若第k数不可置i,则u=1  
    if(u==0)           // 若第k数可置i,则检测是否到n个数  
               { if(k==n && b[a[n]+a[1]]==1 && s<3) // 若已到n个数时打印出一个解 
    	              { s++; 
                    printf(" %ld:  1",s);
                    for (j=2;j<=n;j++)
                       printf(",%d",a[j]);
    		            printf("
    ");
    	               } 
              else  
    				   p(k+1);     // 若没到m个数,则探索下一个数 p(k+1) 
            }
         }
    }
    return s;
    }
    

      

  • 相关阅读:
    win10开机自启脚本
    centos7安装redis
    oracle安装
    Python进程和线程实例详解
    sonar+postgresql
    centos7更换下载源
    Python强大的日志模块logging
    centos7切换图形界面
    centos7安装mysql5.7
    Python正则表达式大全
  • 原文地址:https://www.cnblogs.com/www-x/p/8242849.html
Copyright © 2020-2023  润新知