文章目录

  • 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 + " 个自幂数");}
}

结果截图:
优化前的耗时为1213秒:

优化后的时间为46s,

Java自幂数计算及其算法改进相关推荐

  1. JAVA 三点定位相关计算(二,三角形质心算法)

    三角形质心算法 三圆为R1,R2,R3,圆心坐标(X1,Y1),(X2,Y2),(X3,Y3),半径分别为r1,r2,r3. 相关链接 链接: JAVA 三点定位相关计算(一,两圆关系). 1,R1, ...

  2. java 计算星座算法,java 依据生日计算星座

    当前位置:我的异常网» 编程 » java 依据生日计算星座 java 依据生日计算星座 www.myexceptions.net  网友分享于:2013-09-06  浏览:344次 java 根据 ...

  3. java偶校验计算代码_191120_02 Java常用加密校验转换算法汇总

    Java常用加密校验转换算法汇总 作者:邵发 官网:http://afanihao.cn/java 本文是Java学习指南系列教程的官方配套文档.内容介绍Java里的常用算法的使用,包含转换Hex / ...

  4. java 算法比较,java几种面消隐算法的比较

    达内java培训:本文就 目前现有面消隐算法进行 了分类,对每类算法特 点进行 了总结.从每种 算法本 身的特点 .消隐空间.排序效率和对场景的限制这几方面 .重点分析比较 了几种常用的面消隐算法. ...

  5. Java数据结构第一讲-排序算法

    常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构) 数据结构和算法作为程序员的基本功,一定得稳扎稳打的学习,我们常见的框架底层就是各类数据 ...

  6. java毕业设计——基于java+MMAS的蚁群算法路由选择可视化动态模拟设计与实现(毕业论文+程序源码)——蚁群算法路由选择可视化动态模拟

    基于java+MMAS的蚁群算法路由选择可视化动态模拟设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+MMAS的蚁群算法路由选择可视化动态模拟设计与实现,文章末尾附有本毕业设计的 ...

  7. Java虚拟机规范阅读(二)IEEE754简介以及Java虚拟机中的浮点算法

    什么是浮点数 在计算机系统的发展过程中,曾经提出过多种方法表达实数.典型的比如相对于浮点数的定点数(Fixed Point Number).在这种表达方式中,小数点固定的位于实数所有数字中间的某个位置 ...

  8. Java基础-时间复杂度计算方式

    Java基础-时间复杂度计算方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   时间复杂度通常是衡量算法的优劣的,衡量算法的时间严格来讲是很难衡量的,由于不同的机器性能不用环境 ...

  9. MIT新研究:43%算法改进速度超摩尔定律,解决超大规模问题,算法比硬件更有用...

    博雯 发自 凹非寺 量子位 报道 | 公众号 QbitAI 软件算法对计算速度的提升有多大? MIT最新研究说:超过4成算法对性能的改进,已经超过了硬件的摩尔定律. 对于中等规模的问题,30%-43% ...

最新文章

  1. 3. $()下的常用方法
  2. Spring 事务提交回滚源码解析
  3. P4491-[HAOI2018]染色【二项式反演,NTT】
  4. vb6 获取zip列表_深入学习redis(压缩列表)
  5. 关于e的等式及相关证明
  6. 质子和中子数量的一点疑问
  7. 2022低压电工上岗证题目及答案
  8. 某职业院校二级学院的发展规划
  9. 哔哩哔哩APP导出缓存视频并合并成MP4
  10. EMI的主要原因-共模电流
  11. [已解决]你的支付授权失败。请核对你的信息并重试,或尝试其他支付方式。请联系你的银行了解更多信息
  12. 自由度+凝固度+统计的新词发现
  13. 清除右键新建中多余菜单
  14. HTML动画XYZ轴的用法详解
  15. matlab_plot实时画点
  16. CSS Grid 网格布局完整教程
  17. 基于51单片机的宠物自动猫粮狗粮喂养机proteus仿真原理图PCB
  18. 丘成桐中学生计算机科学竞赛,丘成桐计算机奖介绍,为什么要参加丘成桐奖?...
  19. Windows 系统文件资源管理器的命令行参数(如何降权打开程序,如何选择文件)
  20. 伯克利的电气工程和计算机科学专业,Berkeley的Electrical Engineering Computer Sciences「加州大学伯克利分校电气工程与计算机科学系」...

热门文章

  1. html input 删除线,css样式实现字体删除线效果
  2. TP6 + Layui实现无限极分类
  3. git版本回退命令_git 版本回退 撤销 删除
  4. AirSim无人机仿真(Ubuntu18.04)
  5. 79元限抢Jeep专柜「冰丝速干裤」!穿上它让你“胯下生风”,比裸奔还爽!
  6. 读书笔记之一平米健身:硬派健身
  7. 【翻译】智能制造中EDA 应用及益处系列之四:精密故障检测与分类(FDC)
  8. python-编码实现趋势外推法
  9. 项目实践系列-点击生成自定义设置的二维码
  10. Android Studio 作业 BMI 计算器