【演算法】數學之旅,根據素數特征尋找底數

来源:https://www.cnblogs.com/lan80/archive/2023/09/27/17731054.html
-Advertisement-
Play Games

模擬.NET實際應用場景,綜合應用三個主要知識點:一是使用dnSpy反編譯第三庫及調試,二是使用Lib.Harmony庫實現第三庫攔截、偽造,三是實現同一個庫支持多版本同時引用。 ...


當下午六點的鐘聲敲響,小悅如常地結束了一天的工作。她坐在工位上,腦海中不禁回想起自己學習數學的過程。那些數字、公式以及那些漫長夜晚的努力,都像是一段迷人的旋律,讓她無法忘懷。當她沉浸在回憶中時,那迷人的微笑映入了旁人的眼帘,而這一幕恰好被一位同事捕捉到。

“你在笑什麼呢?”同事好奇地問道。

“哦,沒什麼。”小悅笑著回答,“只是想起了一些有趣的數學問題。”

由於等電梯的人太多,小悅便開始回想那些神奇的數字,它們就像是被隱藏在數學世界中的寶藏,讓當時年少的她充滿了好奇與探索的欲望。她一一列舉出那些數字: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 }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 0. 數據說明 本項目所用數據集包含了一個家庭6個月的用電數據,收集於2007年1月至2007年6月。 這些數據包括有功功率、無功功率、電壓、電流強度、分項計量1(廚房)、分項計量2(洗衣房)和分項計量3(電熱水器和空調)等信息。該數據集共有260,640個測量值,可以為瞭解家庭用電情況提供重要的見 ...
  • 一、背景 微信小程式手機號授權介面,從23年8月開始實行付費驗證。 文檔地址:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getRealtimePhoneNumber.html 新版手機號授權說明如下 ...
  • 前提 已經創建並編寫好了windows服務程式,且下載了Microsoft Visual Studio Installer Project插件。 創建windows服務程式的參考鏈接:https://blog.csdn.net/xiketangAndy/article/details/1268518 ...
  • [QuickApi("hello/world")] public class MyApi : BaseQuickApi<Req,Rsp>{} 使用方式 : dotnet add package Biwen.QuickApi dotnet add package Biwen.QuickApi.Sour ...
  • 在項目中我們經常會使用到委托,委托是多播的,如果控制不好反覆註冊就會多次觸發,可以使用委托的單例模式去註冊,這樣可以避免多次觸發問題。 下麵是幾種委托實例代碼: 帶參數委托管理: /// <summary> /// 帶參數的委托管理 /// </summary> public class Actio ...
  • Word中的圖表功能將數據可視化地呈現在文檔中。這為展示數據和進行數據分析提供了一種方便且易於使用的工具,使作者能夠以直觀的方式傳達信息。要通過C#代碼來實現在Word中繪製圖表,可以藉助 Spire.Doc for .NET 控制項,具體操作參考下文。 C# 在Word中插入柱狀圖 C# 在Word ...
  • https://www.codenong.com/cs106719464/ WinForm中的UI假死其實是個老生常談的問題了,但最近還是很多人問我該如何解決,所以今天就來說明一下如何解決UI假死的問題。實驗程式界面如下圖所示: 方法一:async + await + Task 首先看下麵一段代碼: ...
  • C# BeginInvoke實現非同步編程-CSDN博客 https://blog.csdn.net/Nire_Yeyu/article/details/133203267 C# BeginInvoke實現非同步編程BeginInvoke實現非同步編程的三種模式: 1.等待模式在發起了非同步方法以及做了一些 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...