01 | Program Fcode_cn |
02 | ! 只有2、3、5因子的数,从小到大排列,第一个数是1,1=2^0*3^0*5^0,求解第1500个数。 |
03 | ! szw_sh@163.com |
04 | ! 2020-11-11 |
05 | Implicit None |
06 | Integer , parameter :: NM = 1500 ! 经测试,本代码可以计算到至少n=10000 |
07 | Integer ( kind = 8 ) , parameter :: k ( * ) = [ 2 , 3 , 5 , 7 ] |
08 | Integer ( kind = 8 ) :: a ( NM ) , m , t , mi , n , i , j |
09 | a ( 1 ) = 1 |
10 | n = 1 |
11 | Do While ( n < NM ) |
12 | If ( n < 20 .or. n > NM -20 ) Write ( * , '(i10.4,a,i9)' ) n , ' ==> ' , a ( n ) |
13 | If ( n == 100 ) Write ( * , * ) ' .............' ! 输出部分中间结果。前置的输出,确保n=1时也能输出 |
14 | m = a ( n ) * 5 ! 设定n+1的初值,搜索此前项乘以2、3、5后不小于a(n)的最小值 |
15 | mi = a ( n ) / 5 + 1 ! 向前搜索的终点值 |
16 | Do i = n - 1 + 1 / n , 1 , -1 ! +1/n,保证n=1时,从1开始递减循环,而不是跳过 |
17 | If ( a ( n ) < mi ) Exit |
18 | Do j = 1 , size ( k ) ! 搜寻大于a(n)的最小有效值 |
19 | t = a ( i ) * k ( j ) |
20 | If ( t > a ( n ) .And. t < m ) m = t |
21 | End Do |
22 | End Do |
23 | n = n + 1 ! 计数,赋值 |
24 | a ( n ) = m |
25 | End Do |
26 | Write ( * , '(/i10.4,a,i9)' ) 1500 , ' ==> ' , a ( 1500 ) ! 输出第1500项 |
27 | End Program Fcode_cn |