java完数是什么 什么叫完数
大家好,关于java完数是什么很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于什么叫完数的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!
java求100以内完数。
看不懂的话给我发信息。我已经写的很详细了,有些基本语法要不懂,可以查下百度。
public class test{
//取出1-no之间的所有完数
public static void getWS(int no){
for(int i=4;i<=no;i++){//因为1,2,3肯定不是完数,就姑且从4开始检查,一直检查到no
if(checkWS(i)){
System.out.println(i);//调用checkWS(int n)方法,检查该整数是否是完数。如果该数是完数,输出。
}
}
}
//判断整数n是否是完数
public static boolean checkWS(int n){
int sum=1;//1肯定是一个能整除整数n的被除数,初始化n的所有因子之和sum
for(int i=2;i<=n/2;i++){
if(n%i==0){//%求余,如果余数等于0,则i为该整数的因子,那么把sum=sum+i.这里只检查从2到n/2之间的数,因为大于4的整数最大的因子不会超过他的一半,这样能提高程序效率
sum+=i;
}
}
return sum==n?true:false;//如果最终因子和sum等于它本身则返回true,否则返回false
}
public static void main(String args[]){
getWS(100);//输出100内的完数,这里的数字填多少就找出1-多少之间的所有完数
}
}
什么叫完数
一个数如果恰好等于除它本身外的因子之和,这个数就称为"完数",也叫“完美数”。例如6=1+2+3.(6的因子是1,2,3) [编辑本段]代码求1000以内的完数的C++语言代码如下:
#include<iostream>
using namespace std;
int main()
{int n=1000;
int r=0,j,i;
for(i=1;i<=n;i++)
{r=0;
for(j=1;j<i;j++)
{if(i%j==0){r=r+j;}}
if(r==i)
{cout<<i<<endl;}}
return 0;
}
求1000以内的完数的C语言代码如下:
#include<stdio.h>
int main()
{
int n=1000;
int r,j,i;
for(i=1;i<n; i++){
r= 0;
for(j=1;j<i;j++){
if(i%j== 0){
r= r+ j;
}
}
if(r== i){
printf("the result is:%d\n",r);
}
}
return 0;
}
输出结果为:
6,28,496,
即1000以内的完数只有6、28、496三个数字。
用Java编写代码如下(只需修改N即可):
{public static void main(String args[])
{intsum=0,i,j;
for(i=1;i<=1000;i++)
{for(j=1,sum=0;j<=i/2;j++)
{if(i%j==0)
sum+=j;
}
if(sum==i)
System.out.println("完数:"+i);
}
}
}
求N以内的完数的帕斯卡语言代码如下:
var s,i,m:qword;
begin
for s:=1 to n do begin
m:=0;
for i:=1 to s-1 do
begin
if s mod i=0 then m:=m+i;
end;
if m=s then write(s)
end;
writeln('over');
end.
得出了第四个完数 8128
---------完数(Prefect number的形式------------------------------
欧几里德证明了:一个偶数是完数,当且仅当它具有如下形式:2^(p-1)*(2^p-1)
其中2^p-1是素数
完全数(Perfect number)是一些特殊的自然数:它所有的真因子(即除了本身以外的约数
)的和,恰好等于它本身。
例如:第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3
=6。第二个完全数是28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加
,1+2+4+ 7+ 14=28。后面的数是496,8128。
古希腊数学家欧几里德是通过 2^(n-1)*(2^n-1)的表达式发现头四个完全数的。
当 n= 2^1*(2^2-1)= 6
当 n= 2^2*(2^3-1)= 28
当 n= 2^4*(2^5-1)= 496
当 n= 2^6*(2^7-1)= 8128
欧几里德证明了:一个偶数是完数,当且仅当它具有如下形式:2^(n-1)*(2^n-1),而(2^n-1)必须是素数。
尽管没有发现奇完数,但是当代数学家奥斯丁·欧尔(Oystein Ore)证明,若有奇完全
数,则其形状必然是12p+ 1或36p+ 9的形式,其中p是素数。在1018以下的自然数中奇完
数是不存在的。
3 [编辑本段]例子6,28、496,8128,33550336,8589869056(10位),137438691328(12位),
2305843008139952128(19位)……
偶完数都是以6或8结尾。如果以8结尾,那么就肯定是以28结尾。
除6以外的偶完数,把它的各位数字相加,直到变成一位数,那么这个一位数一定是1(亦即
:除6以外的完数,被9除都余1。):
28:2+8=10,1+0=1
496:4+9+6=19,1+9=10,1+0=1
所有的偶完数都可以表达为2的一些连续正整数次幂之和,从2p- 1到22p- 2:<注:以下a的n次方表示形式为a(n)>
6=2(1)+ 2(2)
28=2(2)+ 2(3)+ 2(4)
496=2(4)+ 2(5)+...+ 2(8)
8128=2(6)+ 2(7)+ 2(8)+...+ 2(12)
33550336=2(12)+ 2(13)+ 2(14)...+ 2(24)
每一个偶完数都可以写成连续自然数之和:
6=1+2+3
28=1+2+3+4+5+6+7;
496=1+2+3+…+30+31
除6以外的偶完数,还可以表示成连续奇数的立方和(被加的项共有):
28=1(3)+ 3(3)
496=1(3)+ 3(3)+ 5(3)+ 7(3)
8128=1(3)+ 3(3)+ 5(3)+...+ 15(3)
33550336=1(3)+ 3(3)+ 5(3)+...+ 125(3)+ 127(3)
每一个完数的所有约数(包括本身)的倒数之和,都等于2:
1/1+ 1/2+ 1/3+ 1/6=2
1/1+ 1/2+ 1/4+ 1/7+ 1/14+ 1/28=2
它们的二进制表达式也很有趣:
(6)10=(110)2
(28)10=(11100)2�
====用VB编写代码如下=====
Dim i As Integer
Dim j As Integer
Dim intSum As Integer
For i= 1 To 1000
intSum= 0
For j= 1 To Int(i/ 2)
If i Mod j= 0 Then intSum= intSum+ j
Next j
If intSum= i Then Print i
Next i
====用PHP编写代码如下=====
求1000以内的完数的PHP语言代码如下:
for($i=1;$i<=1000;$i++)
{$wannum=0;
for($j=1;$j<$i;$j++)
{if($i%$j==0)
{$wannum+=$j;}
}
if($wannum==$i)
echo$i."<br>";
}
==============================================java代码如下
public class WanShu{
public static void main(String[] args){
int s;
for(int m= 1; m< 10000; m++){
s= 0;
for(int i= 1; i< m; i++)
if(m% i== 0)
s= s+ i;
if(s== m)
System.out.println(s);
}
}
}
求大神指点 如何用java 判断一个数是否是完数
java中如何判断一个数是否完全数,可以分为求约数(不包括本身)、求约数之和以及比较自身和约数之和是否相等三个步骤。
第一步:求约数
public static List<int> yueShu(int n){
List<int> list= new ArrayList<int>();
for(int i=1;i<=n/2;i++){
if(n%i==0){
list.add(i);
}
}
return list;
}
解析:如果该数除以循环中的变量的余数为零,那么该变量就是该数的约数。其中有个注意点,如果循环变量大于该数的一半之后就不会是该数的余数了(该数本身除外),所以循环到该数一半时便结束。
第二步:求约数之和
public static int sum(List<int> list){
int total=0;
Iterator it=list.iterator();
while(it.hasNext()){
total+=it.next();
}
return total;
}
解析:利用while遍历List,将List中的值全部加起来。
第三步:比较本身与约数之和是否相等
public static boolean isPerfect(int n){
return n==sum(yueShu(n));
}
如果该数与该数的约数之和相等,则该方法返回true,否则返回false。最后根据该方法的返回值判断该数是不是完全数。
好了,文章到这里就结束啦,如果本次分享的java完数是什么和什么叫完数问题对您有所帮助,还望关注下本站哦!