快捷搜索:  汽车  科技

fortran误差函数(趣味算法-自幂数)

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 test60 implicit none integer i j n integer kk ss 100 write(* *)"请输入幂指数位数:(退出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 if end program test60

运行程序:

fortran误差函数(趣味算法-自幂数)(1)

我的电脑配置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。

fortran误差函数(趣味算法-自幂数)(2)

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

猜您喜欢: