生成指定位数的回文素数
/* * 对于任意大于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; } } }
更多前端内容请访问个人博客:殷路辉的个人博客