首页 >Java >java教程 >Java 中的史密斯数

Java 中的史密斯数

PHPz
PHPz原创
2024-08-30 16:28:28935浏览

在 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