-
#include <stdio.h>
-
#include <stdlib.h>
-
#include <string.h>
-
-
int foo( int n ) {
-
static int *arr = NULL;
-
static size_t arr_sz = 0;
-
int i2, i3, i5, ic;
-
if ( n <= arr_sz ) {
-
return arr[ n-1 ];
-
} else {
-
int *arr_new = (int *) realloc( arr, n*sizeof(int) );
-
memset( arr_new + arr_sz, 0, (n-arr_sz)*sizeof(int) );
-
arr = arr_new;
-
arr_sz = n;
-
}
-
arr[0] = 1;
-
for ( i2=i3=i5=0, ic=1; ic<n; ) {
-
int p2=arr[i2]*2, p3=arr[i3]*3, p5=arr[i5]*5, p;
-
p = p2 < p3 ? p2 : p3;
-
p = p < p5 ? p : p5;
-
if ( p == p2 ) i2++;
-
if ( p == p3 ) i3++;
-
if ( p == p5 ) i5++;
-
arr[ ic++ ] = p;
-
}
-
return arr[ n-1 ];
-
}
-
-
int main()
-
{
-
int n;
-
while ( scanf( "%d", &n ) == 1 && n > 0 )
-
printf( "arr(%d) = %d\n", n, foo( n ) );
-
return 0;
-
}
-
丑数 按照顺序被2,3,5 (质数)整除后排序
最新推荐文章于 2019-05-06 16:51:18 发布