oracle 取中间间隔的数_Fortran 趣味算法-自幂数

今天我们利用Fortran来实现n位数的自幂数。这是一个有趣的算法。

自幂数是指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它本身。(例如:当n为4时,有1^4 + 6^4 + 3^4 + 4^4 = 1634,1634即是n为4时的一个自幂数)

自幂数包括:

一位自幂数:独身数

二位自幂数:没有

三位自幂数:水仙花数

四位自幂数:四叶玫瑰数

五位自幂数:五角星数

六位自幂数:六合数

七位自幂数:北斗七星数

八位自幂数:八仙数

九位自幂数:九九重阳数

十位自幂数:十全十美数

开发思路:

1,输入n,则n位数就在10^(n-1)和(10^n)-1之间。例如输入“4”,则最小的四位数就是10^(4-1)=1000,最大的四位数是(10^4)-1=9999。

2,当n=1时,直接就是1-9。

3,取出n位数的每一位。以4位数字1234为例,取千位1,1234除以10^(4-1)=1。取百位2,先取余mod(1234,10^(4-1)=234,再除以10^(4-1-1)=2。取十位3,先取余mod(1234,10^(4-1-1)=34,再除以10^(4-1-1-1)=3。取个位4,直接和10取余,mod(1234,10)=4。朋友们看看规律。我们可以先取出n位数的最高位和最低位,中间的位数循环取出。

4,每一位的n次方相加,如果等于这个n位数,则这个数就是自幂数。

代码如下:

program test60implicit noneinteger i,j,ninteger kk,ss100write(*,*)"请输入幂指数位数:(退出0)"read(*,*)n    if(n<1)then        stop    else        j=0    do kk=10**(n-1),(10**n)-1,1    if(n==1)then    write(*,*)"幂指数",kk                j=j+1    else    ss=0    do i=1,n-2,1  !减去最高位和最低位    ss=ss+(mod(kk,10**(n-i))/10**(n-i-1))**n    end do    ss=ss+(kk/10**(n-1))**n+mod(kk,10)**n  !最后加上最高位和最低位    if(ss==kk)then    write(*,*)"幂指数",kk                    j=j+1    end if    end if        end do        write(*,*)"共有",j,"个。"    go to 100    end ifend program test60

运行程序:

3cecb9dc2869c5620bbe49a553a07e54.png

我的电脑配置i5,8G。运行前7位都是秒出,运行8位时略有停顿,运行9位大约有18分钟,运行10位我是一晚上没关机,早上才出结果。

最后给出运行的结果:

n为1时,自幂数称为独身数。显然,1,2,3,4,5,6,7,8,9都是自幂数。

n为2时,没有自幂数。

n为3时,自幂数称为水仙花数,有4个:153,370,371,407;

n为4时,自幂数称为四叶玫瑰数,共有3个:1634,8208,9474;

n为5时,自幂数称为五角星数,共有3个:54748,92727,93084;

n为6时,自幂数称为六合数, 只有1个:548834;

n为7时,自幂数称为北斗七星数, 共有4个:1741725,4210818,9800817,9926315;

n为8时,自幂数称为八仙数, 共有3个:24678050,24678051,88593477;

n为9时,自幂数称为九九重阳数,共有4个:146511208,472335975,534494836,912985153;

n为10时,自幂数称为十全十美数,只有1个:4679307774。

64b4d044ea4755c0833c38df10b83bcf.png

朋友们如果机器配置好,可以运行一下11,12位,我就不折腾电脑了。哈哈。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值