生成指定位数的回文素数

/*
 * 对于任意大于1的整数,若仅包含1和它本身两个因子,那么它是素数;如果一个素数,无论从左到右读,
 * 还是从右往左读,都是同一个数,那么它就是回文素数。例如,11,131就是回文素数。
 * 请设计一个回文素数类,用户能使用此类获取特定长度的回文素数。
 * 要求:
 * a、任何用户调用该类,都是使用同一个实例
 * b、用户输出数字长度大于等于3位
 * c、相邻三次返回结果不能相同
 * d、无结果时返回-1
 */

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace huiwensushu
{
    class Program
    {
        private static int str1 = 0, str2 = 0, str3 = 0;
        private static int jeck = 0;
        static void Main(string[] args)
        {
            GetMain();
        }
        //用户交互函数
        private static void GetMain()
        {
            int number = 0; string gets = null;
            do
            {
                Console.Write("输入回文素数的位数(大于等于3):");
                number = Convert.ToInt32(Console.ReadLine());
                if (number < 3)
                {
                    Console.Write("输入错误,请重新输入:");
                    number = Convert.ToInt32(Console.ReadLine());
                }
                int result = GetResult(number);
                if (result != 0)
                    Console.WriteLine(result);
                else
                    Console.WriteLine("-1");
                Console.Write("是否继续(Y/N):");
                gets = Console.ReadLine();
            } while (gets == "Y" || gets == "y");
        }
        //获得指定位数的素数回文
        private static int GetResult(int n)
        {            
            int getNum = 0;            
            List<int> lists = new List<int>();
            lists = GetSushu(n);
            for (int i = 0; i < lists.Count; i++)
            {
                if (IsHuiwen(Convert.ToInt32(lists[i])))
                {                    
                    getNum = lists[i];
                    //判断得到的回文素数是否与最近三次的相同
                    if (jeck == 0)
                    {                        
                        str1 = getNum;
                        jeck = 1;
                        break;
                    }
                    else if (getNum == str1 || getNum == str2||getNum==str3)
                    {
                        continue;
                    }
                    else
                    {
                        if (jeck == 1)
                        {
                            str2 = getNum;
                            jeck = 2;
                        }
                        else if (jeck == 2)
                        {
                            str3 = getNum;
                            jeck = 3;
                        }
                        else
                        {
                            str1 = getNum;
                            jeck = 1;
                        }
                        break;
                    }         
                }
            }
            return getNum;
        }
        //产生number位的素数
        private static List<int> GetSushu(int number)
        {
            List<int> list = new List<int>();
            int num=Convert.ToInt32(Math.Pow(10, number))-1;
            int start=Convert.ToInt32(Math.Pow(10, number-1));
            //产生从start到num之间的素数
            for (int i =start ; i <=num ; i++) 
            {
                bool flag = true;
                int k = Convert.ToInt32(Math.Sqrt(i));
                for (int j = 2; j <= k; j++)
                {
                    //如果i除以j余数为0,则标志flag为False,并强制重新开始循环
                    if (i % j == 0)
                    {
                        flag = false;                        
                        break;         
                    }
                }
                if (flag == true)
                {
                    list.Add(i);
                }
            }
            return list;
        }
        //判断number是否为回文
        private static bool IsHuiwen(int number)
        {
            string leng = number.ToString();
            bool a = true;
            for (int i = 0; i < leng.Length/2; i++)
            {
                int dd = Convert.ToInt32(leng.Substring(i, 1));
                int mm = Convert.ToInt32(leng.Substring(leng.Length-1 - i, 1));
                if (dd != mm)
                {
                    a = false;
                    break;
                }
            }
            return a;
        }
    }
} 

 

posted @ 2012-07-09 22:50  Alec-Yin  阅读(429)  评论(0编辑  收藏  举报
更多前端博客,访问:http://lhyin.com