在 Java 中我們有不同類型的功能;史密斯號碼是提供給使用者的功能?;旧希访芩箶?shù)只不過是一個合數(shù)(在數(shù)係中以10為底),其所有數(shù)字之和等於其所有質(zhì)因數(shù)(不包括1)所有數(shù)字之和,這就是所謂的史密斯數(shù)數(shù)字。史密斯數(shù)的另一個名稱是笑話數(shù)。根據(jù)定義,我們可以說,如果滿足條件,所有質(zhì)數(shù)都被自然排除。通常,史密斯數(shù)是根據(jù)使用者要求及其問題陳述的一些要求在數(shù)學(xué)中使用的數(shù)字系統(tǒng)的一個非?;镜淖訖谖?。
開始您的免費軟體開發(fā)課程
網(wǎng)頁開發(fā)、程式語言、軟體測試及其他
史密斯數(shù)背後的邏輯
現(xiàn)在讓我們來看看史密斯數(shù)背後的邏輯如下。
史密斯數(shù)的邏輯很簡單,我們考慮一下下面的數(shù)字,我們就很容易理解如下邏輯了。
範(fàn)例:假設(shè)我們需要檢查給定的數(shù)字是否為史密斯號碼。
給定的數(shù)字是:95
首先,我們要找出 95 的質(zhì)因數(shù)是 19 和 5 (5, 19)
現(xiàn)在求數(shù)字和 9 + 5 = 14
質(zhì)因數(shù)總和為 5 + 1 + 9 = 15
現(xiàn)在比較兩個結(jié)果,看這裡 14 不等於 15。所以給定的數(shù)字不是素數(shù)。
讓我們考慮另一個數(shù)字,如下所示。
給出的數(shù)字:58
先找出 58 = 2 和 29 的質(zhì)因數(shù)
質(zhì)因數(shù)總和 = 2 + 2 +9 = 13
給定數(shù)字的總和 = 5 + 8 = 13
現(xiàn)在比較兩個結(jié)果,這裡兩個結(jié)果是相同的,或者我們可以說是相等的。所以我們可以說給定的數(shù)字是史密斯數(shù)。
這就是史密斯數(shù)背後非常簡單的邏輯,我們只需要比較素數(shù)階乘和與數(shù)字和即可。如果兩個總和相等,則給定的數(shù)字是史密斯數(shù),否則該數(shù)字不是史密斯數(shù)。
如何在Java中檢查史密斯數(shù)?
現(xiàn)在讓我們看看如何在 java 中檢查給定的數(shù)字是否是 smith。
在上面這一點中,我們已經(jīng)討論了史密斯數(shù)的不同範(fàn)例?,F(xiàn)在讓我們來看看尋找史密斯編號的不同步驟,如下所示。
1.首先我們需要初始化或讀取使用者的數(shù)字。
2.之後我們需要找出給定數(shù)字的數(shù)字總和。
3.接下來我們要找出給定數(shù)字的質(zhì)數(shù)因子。
4.現(xiàn)在計算質(zhì)因數(shù)的數(shù)字和。
5.現(xiàn)在比較給定數(shù)字的數(shù)字和與質(zhì)因數(shù)的數(shù)字和。
a.如果兩個和相等,那麼我們可以說給定的數(shù)字是史密斯數(shù)。
b.否則,我們可以認為給定的數(shù)字不是史密斯數(shù),因為總和不同。
所以上述步驟對於用Java實作史密斯數(shù)程式很有用。
範(fàn)例
現(xiàn)在讓我們看看java中史密斯數(shù)的不同範(fàn)例,以便更好地理解,如下。
範(fàn)例#1
代碼:
import java.util.*; public class Smith_Num { static int F_Sum_P_Fact(int no) { int j=2, add=0; while(no>1) { if(no%j==0) { add=add+F_S_Digit(j); no=no/j; } else { do { j++; } while(!isPrime(j)); } } return add; } static int F_S_Digit(int no) { int sum=0; while(no>0) { sum=sum+no%10; no=no/10; } return sum; } static boolean isPrime(int j) { boolean b=true; int d=2; while(d<Math.sqrt(j)) { if(j%d==0) { b=false; } d++; } return b; } public static void main(String args[]) { Scanner s_c = new Scanner(System.in); System.out.print("Enter a number: "); int no=s_c.nextInt(); int x = F_S_Digit(no); int y = F_Sum_P_Fact(no); System.out.println("addition of digit = "+x); System.out.println("addition of prime factors digits is = "+y); if(x==y) System.out.print("The user enterd number is smith number."); else System. out.print("The user entered number is not smith number."); } }
說明
在上面的程式中,我們嘗試用java實作史密斯數(shù)程式。在這裡,我們首先創(chuàng)建了質(zhì)因數(shù)數(shù)字總和的函數(shù);同樣,我們還創(chuàng)建了函數(shù)來查找給定數(shù)字的數(shù)字總和,如上面的程式所示。之後,我們創(chuàng)建了使用布林函數(shù)檢查給定數(shù)字是否為素數(shù)的函數(shù)。然後我們編寫主函數(shù),在主函數(shù)中我們接受來自使用者的數(shù)字並呼叫我們已經(jīng)創(chuàng)建的所有函數(shù)並比較兩個總和。如果總和相等,則列印給定的數(shù)字為史密斯數(shù),如果總和不相等,則列印給定的數(shù)字不是史密斯數(shù)。我們使用下面的螢?zāi)唤貓D來說明上述程式的最終輸出。
範(fàn)例#2
讓我們來看另一個例子,如下。
代碼:
import java.util.*; public class Smith_Num_2 { static List<Integer> F_P_Fact(int no) { List<Integer> output = new ArrayList<>(); for (int j = 2; no % j == 0; no = no/j) output.add(j); for (int j = 3; j* j <= no; j=j+2) { while (no % j == 0) { output.add(j); no = no/j; } } if (no != 1) output.add(no); return output; } static int S_Digit(int no) { int s= 0; while (no > 0) { s =s+(no % 10); no = no/10; } return s; } public static void main(String args[]) { for (int no = 1; no < 5000; no++) { List<Integer> Fact = F_P_Fact(no); if (Fact.size() > 1) { int s = S_Digit(no); for (int fa : Fact) s =s-S_Digit(fa); if (s == 0) System.out.println(no); } } } }
說明
在上面的範(fàn)例中,我們試著找出 5000 以內(nèi)的所有 smith 編號,如圖所示。我們使用下面的螢?zāi)唤貓D來說明上述程式的最終輸出。
結(jié)論
我們希望您透過這篇文章學(xué)習(xí) Java 中的史密斯數(shù)。從上面的文章中,我們了解了史密斯數(shù)的基本邏輯,也看到了史密斯數(shù)的不同例子。從這篇文章中,我們學(xué)習(xí)瞭如何以及何時在 java 中使用史密斯數(shù)。
以上是Java 中的史密斯數(shù)的詳細內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

在HTML中合理使用語義化標(biāo)籤能提升頁面結(jié)構(gòu)清晰度、可訪問性和SEO效果。 1.用於獨立內(nèi)容區(qū)塊,如博客文章或評論,需保持自包含性;2.用於歸類相關(guān)內(nèi)容,通常包含標(biāo)題,適用於頁面不同模塊;3.用於與主內(nèi)容相關(guān)但非核心的輔助信息,如側(cè)邊欄推薦或作者簡介。實際開發(fā)中應(yīng)結(jié)合、等標(biāo)籤,避免過度嵌套,保持結(jié)構(gòu)簡潔,並通過開發(fā)者工具驗證結(jié)構(gòu)合理性。

遇到“此操作需要提升權(quán)限”提示時,說明你需要管理員權(quán)限才能繼續(xù)。解決方法包括:1.右鍵選擇“以管理員身份運行”程序或設(shè)置快捷方式始終以管理員身份運行;2.檢查當(dāng)前賬戶是否為管理員賬戶,若不是則切換或請求管理員協(xié)助;3.用管理員權(quán)限打開命令提示符或PowerShell執(zhí)行相關(guān)命令;4.在必要時通過獲取文件所有權(quán)或修改註冊表等手段繞過限制,但此類操作需謹(jǐn)慎並充分了解風(fēng)險。確認權(quán)限身份並嘗試上述方法通常可解決問題。

Callable和Runnable在Java中主要有三點區(qū)別。第一,Callable的call()方法可以返回結(jié)果,適合需要返回值的任務(wù),如Callable;而Runnable的run()方法無返回值,適用於無需返回的任務(wù),如日誌記錄。第二,Callable允許拋出checked異常,便於錯誤傳遞;而Runnable必須在內(nèi)部處理異常。第三,Runnable可直接傳給Thread或ExecutorService,而Callable只能提交給ExecutorService,並返回Future對像以

Javaprovidesmultiplesynchronizationtoolsforthreadsafety.1.synchronizedblocksensuremutualexclusionbylockingmethodsorspecificcodesections.2.ReentrantLockoffersadvancedcontrol,includingtryLockandfairnesspolicies.3.Conditionvariablesallowthreadstowaitfor

Java的類加載機制通過ClassLoader實現(xiàn),其核心工作流程分為加載、鏈接和初始化三個階段。加載階段由ClassLoader動態(tài)讀取類的字節(jié)碼並創(chuàng)建Class對象;鏈接包括驗證類的正確性、為靜態(tài)變量分配內(nèi)存及解析符號引用;初始化則執(zhí)行靜態(tài)代碼塊和靜態(tài)變量賦值。類加載採用雙親委派模型,優(yōu)先委託父類加載器查找類,依次嘗試Bootstrap、Extension和ApplicationClassLoader,確保核心類庫安全且避免重複加載。開發(fā)者可自定義ClassLoader,如URLClassL

Java異常處理的關(guān)鍵在於區(qū)分checked和unchecked異常並合理使用try-catch、finally及日誌記錄。 1.checked異常如IOException需強制處理,適用於可預(yù)期的外部問題;2.unchecked異常如NullPointerException通常由程序邏輯錯誤引起,屬於運行時錯誤;3.捕獲異常時應(yīng)具體明確,避免籠統(tǒng)捕獲Exception;4.推薦使用try-with-resources自動關(guān)閉資源,減少手動清理代碼;5.異常處理中應(yīng)結(jié)合日誌框架記錄詳細信息,便於後

Java支持異步編程的方式包括使用CompletableFuture、響應(yīng)式流(如ProjectReactor)以及Java19 中的虛擬線程。 1.CompletableFuture通過鍊式調(diào)用提升代碼可讀性和維護性,支持任務(wù)編排和異常處理;2.ProjectReactor提供Mono和Flux類型實現(xiàn)響應(yīng)式編程,具備背壓機制和豐富的操作符;3.虛擬線程減少並發(fā)成本,適用於I/O密集型任務(wù),與傳統(tǒng)平臺線程相比更輕量且易於擴展。每種方式均有適用場景,應(yīng)根據(jù)需求選擇合適工具並避免混合模型以保持簡潔性

靜態(tài)關(guān)鍵字在Java中用於創(chuàng)建屬於類本身的變量和方法,而非類的實例。 1.靜態(tài)變量被所有類的實例共享,適用於存儲所有對象共有的數(shù)據(jù),如Student類中的schoolName。 2.靜態(tài)方法屬於類,不依賴對象,常用於工具函數(shù),如Math.sqrt(),且只能訪問其他靜態(tài)成員。 3.靜態(tài)代碼塊用於在類加載時執(zhí)行初始化操作,如加載庫或設(shè)置日誌。 4.靜態(tài)內(nèi)部類可以獨立於外部類實例化,但無法訪問外部類的非靜態(tài)成員。合理使用static能有效管理類級別的資源和行為。
