四胞胎素数:找出‌个位数分别是 1、3、7、9‌,且‌十位及更高位数字完全相同‌的质数,例如 11、13、17、19

四胞胎素数

找出‌个位数分别是 1、3、7、9‌,且‌十位及更高位数字完全相同‌的质数

大于10之后的质数,个位数一定是[1,3,7,9]中的某一个

这类数的形式是:

10×a + d ‌,其中 a 是十位及以上组成的整数(a ≥ 1),d ∈ {1, 3, 7, 9},且四个数都必须是‌质数‌。

最终结果:

满足"个位数是 1、3、7、9,且前面数字相同"的质数组合有:

  • 11, 13, 17, 19
  • 101, 103, 107, 109
  • 191, 193, 197, 199

这些是小于 200 内仅有的三组。

因个位数是奇数,因此 不用考虑除以2.个位数不是5,因此,也不用考虑除以5.

除数只用考虑 除以 3 和 7,11 开始的质数

C#示例程序:

cs 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/*
 * 找出‌个位数分别是 1、3、7、9‌,且‌十位及更高位数字完全相同‌的质数
大于10之后的质数,个位数一定是[1,3,7,9]中的某一个

这类数的形式是:
‌10×a + d‌,其中 a 是十位及以上组成的整数(a ≥ 1),d ∈ {1, 3, 7, 9},且四个数都必须是‌质数‌。
我们计算出 10~10000之间的连续质数序列
*/

namespace PrimeSerialDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("-------------------------------四胞胎素数-------------------------------");
            Console.WriteLine("获取10~10000之内的连续质数【找出个位数分别是 1、3、7、9且十位及更高位数字完全相同‌的质数】");

            GetPrimeQuadruplets();
            Console.ReadKey();
        }

        /// <summary>
        /// 获取 四胞胎素数
        /// 获取10~10000之内的连续质数【找出个位数分别是 1、3、7、9且十位及更高位数字完全相同‌的质数】
        /// </summary>
        static async void GetPrimeQuadruplets()
        {
           Task task = Task.Run(() =>
           {
               System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
               stopwatch.Start();
               int[] singleDigits = new int[4] { 1, 3, 7, 9 };//个位数是1,3,7,9
               int sequence = 0;//第几组组合
               for (int i = 10; i < 10000; i += 10)
               {
                   int[] numbers = new int[4] { i + singleDigits[0], i + singleDigits[1], i + singleDigits[2], i + singleDigits[3] };
                   if (JudgeAllPrime(numbers))
                   {
                       sequence++;
                       Console.WriteLine($"当前第【{sequence}】组连续质数为【{string.Join(", ", numbers)}】");
                   }
               }
               stopwatch.Stop();
               Console.WriteLine($"10~10000之内的四胞胎素数共有【{sequence}】组,耗时【{stopwatch.Elapsed.TotalSeconds}】秒");
           });
           await task;
        }

        /// <summary>
        /// 使用埃拉托色尼筛法获取小于 n 的所有质数
        /// </summary>
        /// <param name="n">上限值(不包含)</param>
        /// <returns>包含所有小于 n 的质数的列表</returns>
        static List<int> GetPrimesLessThan(int n)
        {
            // 布尔数组,索引代表数字,值代表是否为质数
            // 初始化为 true,假设所有数都是质数
            bool[] isPrime = new bool[n];
            for (int i = 2; i < n; i++)
            {
                isPrime[i] = true;
            }

            // 筛法核心逻辑
            // 只需要检查到 sqrt(n)
            for (int i = 2; i * i < n; i++)
            {
                if (isPrime[i])
                {
                    // 如果 i 是质数,则将 i 的所有倍数标记为非质数
                    // 从 i*i 开始,因为更小的倍数已经被之前的质数标记过了
                    for (int j = i * i; j < n; j += i)
                    {
                        isPrime[j] = false;
                    }
                }
            }

            // 收集结果
            List<int> primes = new List<int>();
            for (int i = 2; i < n; i++)
            {
                if (isPrime[i])
                {
                    primes.Add(i);
                }
            }

            return primes;
        }

        /// <summary>
        /// 判断一个整数是否是质数
        /// 大于10之后的质数,个位数一定是[1,3,7,9]中的某一个
        /// </summary>
        /// <param name="number">待判断的整数</param>
        /// <returns>如果是质数返回true,否则返回false</returns>
        static bool IsPrime(int number)
        {
            // 小于2的数不是质数
            if (number < 2)
            {
                return false;
            }

            // 2和3是质数
            if (number <= 3)
            {
                return true;
            }

            // 排除偶数和3的倍数,优化循环步长
            if (number % 2 == 0 || number % 3 == 0)
            {
                return false;
            }

            // 只需检查到sqrt(number),且只检查6k±1形式的数
            for (int i = 5; i * i <= number; i += 6)
            {
                if (number % i == 0 || number % (i + 2) == 0)
                {
                    return false;
                }
            }

            return true;
        }

        /// <summary>
        /// 判断指定的数字集合是否全都为质数【素数】
        /// </summary>
        /// <param name="numbers"></param>
        /// <returns></returns>
        static bool JudgeAllPrime(int[] numbers) 
        {
            for (int i = 0; i < numbers.Length; i++)
            {
                if (!IsPrime(numbers[i])) 
                {
                    return false;
                }
            }
            return true;
        }
    }
}

运行如图:

相关推荐
Hello.Reader1 小时前
算法基础(十二)——主方法:快速求解常见递归式
算法
小O的算法实验室2 小时前
2026年IEEE TITS,面向按需外卖配送调度的特定问题知识与基于学习元启发式算法,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
加勒比海带662 小时前
目标检测算法——农林行业数据集汇总附下载链接【Plant】
大数据·图像处理·人工智能·算法·目标检测
洛水水2 小时前
【力扣100题】23. 螺旋矩阵
算法·leetcode·矩阵
影sir2 小时前
不同测试数据下,该如何选择算法
算法·深度优先
潇湘散客2 小时前
CAX软件插件化设计实现牛刀小试
c++·算法·图形学·opengl
速易达网络2 小时前
2026,视觉算法正在经历一场静默革命
算法
WBluuue3 小时前
Codeforces 1094 Div1+2(ABCDE)
c++·算法
TENSORTEC腾视科技3 小时前
腾视科技大模型一体机解决方案:低成本私有化落地,重塑行业智能应用新格局
大数据·人工智能·科技·算法·ai·零售·大模型一体机