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;
            }
        }
    } 
  • 相关阅读:
    Django文档翻译:模型参考(Model Reference)
    Anthem.NET 的 "BAD RESPONSE" 问题的脚本调试技巧小结
    注意 JavaScript 中 RegExp 对象的 test 方法
    CodeProject 文章收藏 (200713)
    Django 学习纪要(1) 模版语法
    关注一下 IronPython Community Edition
    SubSonic 的字段名未转义问题修正
    Error while trying to run project: Unable to start debugging 绑定句柄无效
    Django 中自定义 tag 如何获取变量参数的值
    Karrigell 初次学习
  • 原文地址:https://www.cnblogs.com/yinluhui0229/p/2583811.html
Copyright © 2011-2022 走看看