zoukankan      html  css  js  c++  java
  • 生成指定位数的回文素数 Alec

    /*
     * 对于任意大于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;
            }
        }
    } 
  • 相关阅读:
    Linux日常之命令sort
    Linux日常之命令sed
    Linux日常之命令grep
    Linux日常之命令awk
    Linux日常之命令tee
    Linux日常之数据重定向
    Hibernate打印SQL及附加参数
    使用D3 Geo模块画澳大利亚地图
    基于Spring-WS的Restful API的集成测试
    做项目时需要考虑的安全性问题
  • 原文地址:https://www.cnblogs.com/yinluhui0229/p/2583811.html
Copyright © 2011-2022 走看看