#include<iostream> #include<cstdio> #include<cstdlib> #include<cmath> #include<algorithm> using namespace std; const int Max = ( 1 << 20 ) + 5; long long len[Max],hash[Max]; int n; void pre( ) { for( int i = 1; i <= Max / 2; ++i ) { for( int j = i + i; j < Max; j += i ) { if( len[i] + 1 > len[j] ) { len[j] = len[i] + 1; if( hash[i] == 0 ) hash[j] = 1; else hash[j] = hash[i];//if( j == 100 ) // printf( " len = %I64d %d hash = %I64dn",len[j],i,hash[j] ); } else if( len[i] + 1 == len[j] ) { hash[j] += hash[i]; } }//printf( "*" ); } } int main( ) { //freopen( "1.in","r",stdin ); //freopen( "1.out","w",stdout ); pre( ); while( scanf( "%d",&n ) == 1 ) printf( "%I64d %I64dn",len[n],hash[n] ); //system( "pause" ); return 0; }
转载于:https://www.cnblogs.com/wangjie2/archive/2012/10/26/2741252.html