【算法】数学之旅,根据素数特征寻找底数

这篇具有很好参考价值的文章主要介绍了【算法】数学之旅,根据素数特征寻找底数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

当下午六点的钟声敲响,小悦如常地结束了一天的工作。她坐在工位上,脑海中不禁回想起自己学习数学的过程。那些数字、公式以及那些漫长夜晚的努力,都像是一段迷人的旋律,让她无法忘怀。当她沉浸在回忆中时,那迷人的微笑映入了旁人的眼帘,而这一幕恰好被一位同事捕捉到。

“你在笑什么呢?”同事好奇地问道。

“哦,没什么。”小悦笑着回答,“只是想起了一些有趣的数学问题。”

由于等电梯的人太多,小悦便开始回想那些神奇的数字,它们就像是被隐藏在数学世界中的宝藏,让当时年少的她充满了好奇与探索的欲望。她一一列举出那些数字:89、271、325、328...每个数字都像是拥有独特的秘密。

她深入思考这些数字的特性,尝试找出它们的规律。她惊奇地发现,这些数字的平方值经过反转后,居然都是素数。例如,89的平方是7921,反转后成为1297,这是一个素数;271的平方是73441,反转后成为14437,同样也是一个素数...这些看似平凡无奇的数字,经过平方和反转之后,竟然拥有了素数的特质,这让她感到无比惊奇。

然而,这还不足以满足小悦的好奇心。她进一步发现,这些数字的立方值经过反转后也隐藏着素数的秘密。比如89的立方是704969,反转后是969407,这是一个素数;271的立方是19902511,反转后是11520991,也是一个素数...这些原本看似简单的数字,在经过立方和反转之后,同样也拥有了素数的特质。

当时的小悦深深地被这些发现所吸引,她开始思考这些现象背后的原因。她发现这其实是一种数学规律,与素数、数字反转和数学运算等概念密切关联。这些概念在数学教学中广泛应用于数论、算术和代数等方面的练习和学习,让她对数学有了更深层次的理解和认识。

同时,小悦还意识到这些数学问题的应用不仅仅局限于数学学习和教育。在编程练习中,这些问题也能够引导学习者加深对循环、条件判断和函数等概念的理解和应用。通过解决这些问题,学习者可以锻炼编程思维和解决问题的能力。

小悦的思绪还在继续,她依然沉浸在这种数学世界的探索和发现中,享受着这种无尽的乐趣和挑战。对她来说,这些神奇的数字就像是一把钥匙,打开了一扇通向更广阔数学世界的大门。她期待着未来能够继续用这把钥匙解开更多的数学谜题,探索更多未知的领域。

“数学真是个奇妙的世界啊。”小悦感叹道,她的眼中闪烁着对数学知识无尽的热爱和追求。而那个在工位上回想学习数学过程、下意识迷人的微笑的小悦,永远是同事们心中最美的风景。

小悦面临的问题是如何将这些特殊的数从数字的海洋中寻找出来:创建一个函数SqCubRevPrime(),它接收数组的序号1,2,3,4,5...并输出相应的底数值,这些底数应该能满足平方、立方后反转的数仍是素数的要求:

SqCubRevPrime(1)==89

SqCubRevPrime(2)==271

SqCubRevPrime(3)==325

SqCubRevPrime(4)==328


算法实现:

 1 using System;
 2 using System.Collections.Generic;
 3 
 4 public static class Edm {
 5   // 判断一个无符号长整型数是否为质数(素数)
 6   private static bool IsOddPrime(ulong n) {
 7     // 从3开始,递增2,直到循环变量的平方大于等于给定的数
 8     for (ulong d = 3; d * d <= n; d += 2) {
 9       // 如果给定的数能够被循环变量整除,则返回false,表示不是质数
10       if (n % d == 0) return false;
11     }
12     // 循环结束后没有找到能整除的数,则返回true,表示是质数
13     return true;
14   }
15   
16   // 将一个无符号长整型数进行反转
17   private static ulong Reverse(ulong n) {
18     ulong r = 0;
19     // 从个位开始依次取出并放置到结果变量中
20     while (n > 0) {
21       r = r * 10 + n % 10;
22       // 将给定的数除以10,继续取下一个位数
23       n /= 10;
24     }
25     // 返回结果变量,即反转后的数
26     return r;
27   }
28   
29   // 构建一个无符号整型数的列表
30   private static List<uint> Build(uint max) {
31     var res = new List<uint>();
32     // 从89开始循环到给定的最大值max
33     for (uint n = 89; n <= max; n++) {
34       ulong n2 = n * n, r2 = Reverse(n2);
35       // 计算当前数的平方,并将结果保存在变量n2中
36       // 将n2进行反转,并将结果保存在变量r2中
37       if (r2 > 1 && r2 % 2 != 0) {
38         ulong r3 = Reverse(n2 * n);
39         // 如果r2为奇数且r3为奇数且r2和r3都是质数,则将当前数n添加到列表res中
40         if (r3 % 2 != 0 && IsOddPrime(r2) && IsOddPrime(r3)) res.Add(n);
41       }
42     }
43     // 返回列表res
44     return res;
45   }
46   
47   // 调用Build方法并传入57200作为参数后的结果列表
48   private static List<uint> Seq = Build(57200);
49   
50   // 返回列表Seq中指定索引位置的数
51   public static uint SqCubRevPrime(int n) {
52     return Seq[n - 1];
53   }
54 }
  1. IsOddPrime 方法用于判断一个无符号长整型数是否为奇数质数。它使用一个循环,从3开始,递增2,直到循环变量的平方大于等于给定的数。在循环中,如果给定的数能够被循环变量整除,则返回false,表示不是质数。如果循环结束后没有找到能整除的数,则返回true,表示是质数。

  2. Reverse 方法用于将一个无符号长整型数进行反转。它使用一个循环,将给定的数从个位开始依次取出并放置到结果变量中,然后将给定的数除以10,继续取下一个位数,直到给定的数变为0。最后返回结果变量,即反转后的数。

  3. Build 方法用于构建一个无符号整型数的列表。它首先创建一个空的列表变量 res,然后从89开始循环到给定的最大值 max。在循环中,首先计算当前数的平方,并将结果保存在变量 n2 中。然后将 n2 进行反转,并将结果保存在变量 r2 中。如果 r2 大于1且为奇数,进一步计算 n2 的立方并将结果保存在变量 r3 中。如果 r3 为奇数且 r2 和 r3 都是质数,则将当前数 n 添加到列表 res 中。最后返回列表 res

  4. Seq 是一个列表变量,用于保存调用 Build 方法并传入57200作为参数后的结果列表。

  5. SqCubRevPrime 是一个公共静态方法,用于返回列表 Seq 中指定索引位置的数。它接受一个整型参数 n,并返回列表 Seq 中索引为 n - 1 的元素。


测试用例:

 1 namespace Solution {
 2   
 3   using NUnit.Framework;
 4   using System;
 5   
 6   [TestFixture]
 7   public class SolutionTest
 8   {
 9     static void Act(uint expected, int n) 
10       => Assert.AreEqual(expected, Edm.SqCubRevPrime(n), $"n = {n}");
11     
12     [TestCase(89, 1)]
13     [TestCase(271, 2)]
14     [TestCase(325, 3)]
15     [TestCase(328, 4)]
16     public void FixedTests(int expected, int n) => Act((uint)expected, n);
17     
18     [Test]
19     public void RandomTests([Random(1, 230, 50)] int n)
20     {
21       var solutions = new uint[] {89, 271, 325, 328, 890, 1025, 1055, 1081, 1129, 1169, 1241, 2657, 2710, 3112, 3121, 3149, 3244, 3250, 3263, 3280, 3335, 3346, 3403, 4193, 4222, 4231, 4289, 4291, 5531, 5584, 5653, 5678, 5716, 5791, 5795, 5836, 5837, 8882, 8900, 8926, 8942, 9664, 9794, 9875, 9962, 10178, 10250, 10393, 10429, 10499, 10550, 10577, 10651, 10679, 10717, 10718, 10739, 10756, 10762, 10810, 10844, 10895, 10898, 10943, 10996, 11035, 11039, 11084, 11137, 11159, 11164, 11182, 11191, 11290, 11351, 11371, 11575, 11690, 11695, 11707, 11722, 11732, 11795, 11827, 11861, 11885, 12109, 12124, 12242, 12268, 12304, 12361, 12362, 12410, 12433, 12436, 12535, 19144, 19267, 19271, 19273, 19385, 19433, 19442, 19451, 19501, 19564, 19597, 19603, 19631, 19637, 19766, 19846, 19865, 19871, 19909, 19927, 26464, 26491, 26570, 26579, 26621, 26704, 26944, 26965, 27001, 27029, 27052, 27100, 27101, 31120, 31210, 31223, 31237, 31261, 31327, 31331, 31351, 31463, 31469, 31490, 31534, 31561, 31657, 31726, 31739, 31784, 31807, 31883, 31928, 31978, 32066, 32072, 32213, 32255, 32308, 32431, 32440, 32446, 32500, 32539, 32564, 32573, 32630, 32656, 32708, 32749, 32759, 32800, 32888, 32969, 33059, 33254, 33325, 33338, 33350, 33404, 33460, 33475, 33509, 33568, 33575, 33701, 33833, 34030, 34112, 34159, 34163, 41351, 41429, 41473, 41501, 41608, 41639, 41839, 41879, 41930, 41933, 41992, 42029, 42089, 42103, 42121, 42179, 42220, 42235, 42310, 42326, 42385, 42463, 42466, 42524, 42575, 42607, 42682, 42782, 42839, 42890, 42910, 42982, 43045, 43049, 54986, 54991, 55073, 55310, 55492, 55589, 55598, 55603, 55651, 55697, 55718, 55778, 55840, 55859, 55879, 55916, 56005, 56093, 56261, 56279, 56356, 56530, 56681, 56780, 56809, 56968, 57160, 57185};
22       var expected = solutions[n - 1];
23       Act(expected, n);
24     }
25   }
26 }

 文章来源地址https://www.toymoban.com/news/detail-711888.html

到了这里,关于【算法】数学之旅,根据素数特征寻找底数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CV:基于计算机视觉完成两张图片的特征匹配以及用RANSAC方法寻找最佳的匹配点对和单应矩阵的代码

            以下是基于OpenCV库实现的特征匹配和RANSAC算法的Python代码:         在这个代码中,我们首先加载了需要匹配的两张图片,然后用SIFT检测器提取了两张图片中的关键点和特征描述符。接下来,我们用FLANN算法进行特征匹配,并选取了距离比小于0.7的匹配点对作

    2024年02月09日
    浏览(46)
  • Miller-Rabin大素数判断算法的原理及其实现

    一、摘要         大数素性检测一直是数论界、密码学界等经久不衰的研究方向,实现大数素性检测的算法也在不断地被改进。目前已经出现了很多大数素性检测的算法,而Miller-Rabin算法在其中显得十分耀眼。本文调研了常见的大素数判断算法,并详细介绍了Miller-Rabin大

    2024年02月09日
    浏览(39)
  • 算法通关村十三关 | 辗转相除法、素数和丑数

            辗转相除法又称欧几里得算法,求两个数的最大公因数,希腊数学家喜欢用图形来处理问题,于是 将要求最大公约数问题转化为,以两个数字构成矩形,寻找可以铺满整个矩形的最大正方形的边长问题。 例如8和12的最大公因数是4,记作gcd(8,12)=4,辗转相除法的规则

    2024年02月09日
    浏览(47)
  • 算法:二分法---寻找H指数

    1、题目: 给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数 。 根据维基百科上 h 指数的定义: h 代表“高引用次数” ,一名科研人员的 h 指数 是指他(她)至少发表了 h 篇论文,并且每篇论文 至少 被引用

    2024年02月08日
    浏览(45)
  • 无涯教程-KNN算法 - 寻找最近邻居

    K最近邻(KNN)算法是一种监督的ML算法,可用于分类以及回归预测问题,但是,它主要用于行业中的分类预测问题。以下两个属性将很好地定义KNN- 惰性学习算法    -  KNN是一种惰性学习算法,因为它没有专门的训练阶段,并且在分类时将所有数据用于训练。 非参数学习算法

    2024年02月11日
    浏览(37)
  • 【数据结构和算法】寻找数组的中心下标

    Java基础合集 数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 前缀和的解题模板 2.1.1 最长递增子序列长度 2.1.2 寻找数组中第 k 大的元素 2.1.3 最长公共子序列长度 2.1.4 寻找数组中第 k 小的元素 2

    2024年02月04日
    浏览(53)
  • Java使用遗传算法,寻找十滴水问题的最优解

    近期某手游出了个活动,经确认发现本质为十滴水游戏。 简单说一下规则,棋盘大小通常为6x6,在游戏开始时,棋盘随机有若干水珠,其大小范围为1-4。点击棋盘内的一格,会消耗玩家持有的1个小水滴,同时使得该单元格的水珠大小+1。如果水珠大小超过4,则水珠发生爆炸

    2024年02月20日
    浏览(46)
  • 算法-寻找字符串在给定字符串中出现的次数

    相信大家看完这篇字符串的操作一定让你觉得真简单,处理方式也很灵活,那么下来敲黑板了,请你认真看喔。 方法一 使用replace方法和contains方法 统计原字符串的长度,然后新建一个空的字符串,用来接收要统计的字符串在原字符串中替换为空串后的串,然后运用数学公式

    2024年01月21日
    浏览(38)
  • 2023 华数杯(C题)解析+代码思路文章全解!特征分析规划数学建模

    母亲是婴儿生命中最重要的人之一,她不仅为婴儿提供营养物质和身体保护,还为婴儿提供情感支持和安全感。研究显示,母亲的心理状态会对婴儿的发展产生重要影响。本研究目标是利用这些数据,建立婴儿睡眠质量与母亲身心指标之间的关联模型。我们收集了母亲的人口统计学

    2024年02月14日
    浏览(40)
  • 【算法Hot100系列】寻找两个正序数组的中位数

    💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老 导航 檀越剑指大厂系列:全面总

    2024年02月03日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包