Java自幂数计算及其算法改进
创始人
2024-02-16 18:28:26

文章目录

  • 1. 自幂数
  • 2.自幂数的个数
  • 3. 常规自幂数计算方法
  • 4.算法代码改进

1. 自幂数

如果在一个固定的进制中,一个n位自然数等于自身各个数位上数字的n次幂之和,则称此数为自幂数。
例如:在十进制中,153是一个三位数,各个数位的3次幂之和为13+53+3^3=153,所以153是十进制中的自幂数。
在n进制中,所有小于n的正整数都为自幂数,比如2进制中1是自幂数,3进制中1和2都是自幂数,4进制中1,2和3都是自幂数…

2.自幂数的个数

独身数共有9个: 1,2,3,4,5,6,7,8,9;
水仙花数共有4个:153,370,371,407;
四叶玫瑰数共有3个:1634,8208,9474;
五角星数共有3个:54748,92727,93084;
六合数只有1个:548834;
北斗七星数共有4个:1741725,4210818,9800817,9926315;
八仙数共有3个:24678050,24678051,88593477

3. 常规自幂数计算方法

package ui;import javax.swing.*;public class Test1 {public static void main(String[] args) {int count = 0;  //设计一个计数器来统计计算出来的自幂数的个数for (int i = 100; i < 999999999; i++) {  //计算一下999999999以内有游多少个自幂数int length = String.valueOf(i).length();  //获取当前计算整数的长度int sum = 0;  //定义整数,用来统计当前整数的每位数的幂次和int temp = i;  // 定义一个临时变量,该值将用于计算while(temp>0) {int a = temp%10;  // 取出当前数的最后一位,temp = temp/10;   // 将当前数除以10,得到余数sum+=Math.pow(a,length);  // 计算当前数的幂次和。}if(sum==i){  // 如果每位数的幂次和与i相等,则输出改数据。count++;  System.out.println(i);}}System.out.println("共计有 "+ count + " 个自幂数");}
}

4.算法代码改进

第一种方法算到9位数的时候,就需要很长时间才能计算出下一位数。分析了算法,我们很多时间是使用在了调用Math.pow算法上,因为每一次循环都要去调用一下。
改进:我们可以将幂次方的结果放在一个数组中,每次使用的时候,都调用这个数组的值,而不用每次都重复计算一次。

package ui;import javax.swing.*;public class Test1 {public static void main(String[] args) {// 定义一个二维数组,将每一个一位整数的幂次方都计算保存到数组中。double[][] arr =  {{0,1,2,3,4,5,6,7,8,9},{0,1,Math.pow(2,2),Math.pow(3,2),Math.pow(4,2),Math.pow(5,2),Math.pow(6,2),Math.pow(7,2),Math.pow(8,2),Math.pow(9,2)},{0,1,Math.pow(2,3),Math.pow(3,3),Math.pow(4,3),Math.pow(5,3),Math.pow(6,3),Math.pow(7,3),Math.pow(8,3),Math.pow(9,3)},{0,1,Math.pow(2,4),Math.pow(3,4),Math.pow(4,4),Math.pow(5,4),Math.pow(6,4),Math.pow(7,4),Math.pow(8,4),Math.pow(9,4)},{0,1,Math.pow(2,5),Math.pow(3,5),Math.pow(4,5),Math.pow(5,5),Math.pow(6,5),Math.pow(7,5),Math.pow(8,5),Math.pow(9,5)},{0,1,Math.pow(2,6),Math.pow(3,6),Math.pow(4,6),Math.pow(5,6),Math.pow(6,6),Math.pow(7,6),Math.pow(8,6),Math.pow(9,6)},{0,1,Math.pow(2,7),Math.pow(3,7),Math.pow(4,7),Math.pow(5,7),Math.pow(6,7),Math.pow(7,7),Math.pow(8,7),Math.pow(9,7)},{0,1,Math.pow(2,8),Math.pow(3,8),Math.pow(4,8),Math.pow(5,8),Math.pow(6,8),Math.pow(7,8),Math.pow(8,8),Math.pow(9,8)},{0,1,Math.pow(2,9),Math.pow(3,9),Math.pow(4,9),Math.pow(5,9),Math.pow(6,9),Math.pow(7,9),Math.pow(8,9),Math.pow(9,9)},{0,1,Math.pow(2,10),Math.pow(3,10),Math.pow(4,10),Math.pow(5,10),Math.pow(6,10),Math.pow(7,10),Math.pow(8,10),Math.pow(9,10)},{0,1,Math.pow(2,11),Math.pow(3,11),Math.pow(4,11),Math.pow(5,11),Math.pow(6,11),Math.pow(7,11),Math.pow(8,11),Math.pow(9,11)},{0,1,Math.pow(2,12),Math.pow(3,12),Math.pow(4,12),Math.pow(5,12),Math.pow(6,12),Math.pow(7,12),Math.pow(8,12),Math.pow(9,12)}};int count = 0;for (int i = 100; i < 999999999; i++) {int length = String.valueOf(i).length();double sum = 0;int temp = i;while(temp>0) {int a = temp%10;temp = temp/10;sum+=arr[length-1][a];  // 取出二维数组中对应的数据,并与sum相加。}if(sum==i){count++;System.out.println(i);}}System.out.println("共计有 "+ count + " 个自幂数");}
}

结果截图:
在这里插入图片描述

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...