首頁  >  文章  >  Java  >  Java 中的史密斯數

Java 中的史密斯數

PHPz
PHPz原創
2024-08-30 16:28:28830瀏覽

在 Java 中我們有不同類型的功能;史密斯號碼是提供給使用者的功能。基本上,史密斯數只不過是一個合數(在數係中以10為底),其所有數字之和等於其所有質因數(不包括1)所有數字之和,這就是所謂的史密斯數數字。史密斯數的另一個名稱是笑話數。根據定義,我們可以說,如果滿足條件,所有質數都被自然排除。通常,史密斯數是根據使用者要求及其問題陳述的一些要求在數學中使用的數字系統的一個非常基本的子欄位。

開始您的免費軟體開發課程

網頁開發、程式語言、軟體測試及其他

史密斯數背後的邏輯

現在讓我們來看看史密斯數背後的邏輯如下。

史密斯數的邏輯很簡單,我們考慮一下下面的數字,我們就很容易理解如下邏輯了。

範例:假設我們需要檢查給定的數字是否為史密斯號碼。

給定的數字是:95

首先,我們要找出 95 的質因數是 19 和 5 (5, 19)

現在求數字和 9 + 5 = 14

質因數總和為 5 + 1 + 9 = 15

現在比較兩個結果,看這裡 14 不等於 15。所以給定的數字不是素數。

讓我們考慮另一個數字,如下所示。

給出的數字:58

先找出 58 = 2 和 29 的質因數

質因數總和 = 2 + 2 +9 = 13

給定數字的總和 = 5 + 8 = 13

現在比較兩個結果,這裡兩個結果是相同的,或者我們可以說是相等的。所以我們可以說給定的數字是史密斯數。

這就是史密斯數背後非常簡單的邏輯,我們只需要比較素數階乘和與數字和即可。如果兩個總和相等,則給定的數字是史密斯數,否則該數字不是史密斯數。

如何在Java中檢查史密斯數?

現在讓我們看看如何在 java 中檢查給定的數字是否是 smith。

在上面這一點中,我們已經討論了史密斯數的不同範例。現在讓我們來看看尋找史密斯編號的不同步驟,如下所示。

1.首先我們需要初始化或讀取使用者的數字。

2.之後我們需要找出給定數字的數字總和。

3.接下來我們要找出給定數字的質數因子。

4.現在計算質因數的數字和。

5.現在比較給定數字的數字和與質因數的數字和。

a.如果兩個和相等,那麼我們可以說給定的數字是史密斯數。

b.否則,我們可以認為給定的數字不是史密斯數,因為總和不同。

所以上述步驟對於用Java實作史密斯數程式很有用。

範例

現在讓我們看看java中史密斯數的不同範例,以便更好地理解,如下。

範例#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實作史密斯數程式。在這裡,我們首先創建了質因數數字總和的函數;同樣,我們還創建了函數來查找給定數字的數字總和,如上面的程式所示。之後,我們創建了使用布林函數檢查給定數字是否為素數的函數。然後我們編寫主函數,在主函數中我們接受來自使用者的數字並呼叫我們已經創建的所有函數並比較兩個總和。如果總和相等,則列印給定的數字為史密斯數,如果總和不相等,則列印給定的數字不是史密斯數。我們使用下面的螢幕截圖來說明上述程式的最終輸出。

範例#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);
}
}
}
}

說明

在上面的範例中,我們試著找出 5000 以內的所有 smith 編號,如圖所示。我們使用下面的螢幕截圖來說明上述程式的最終輸出。

Java 中的史密斯數

結論

我們希望您透過這篇文章學習 Java 中的史密斯數。從上面的文章中,我們了解了史密斯數的基本邏輯,也看到了史密斯數的不同例子。從這篇文章中,我們學習瞭如何以及何時在 java 中使用史密斯數。

以上是Java 中的史密斯數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn