1166-数字实力
描述
每一个数字都有自己的实力,我们可以从不同的角度来描述数字的实力。我们做出如下定义:一个数字n的实力是它所拥有的因数个数。例如:6的实力是4 ,因为它有4个因数(1,2,3,6)。 现在我们需要知道从1开始到某一个数n中,哪个数字拥有最强的实力。
输入
输出
两个数字m和s。m为从1到n中具有最强实力且最小的数字。s为m的实力。
样例输入
8
样例输出
6 4
#include<iostream> using namespace std; #define MAX 500000 int prime[MAX]; bool a[MAX]; int cnt; void Initprime()//????????? { int i, j; cnt = 0; for( i=2; i<MAX; i++ ) { if( a[i] == 0 ) { prime[cnt++] = i; for( j=2*i; j<MAX; j+=i ) a[j] = 1; } } } int Div( int m ) { int tmp,ret=1; for( int i=0; prime[i]*prime[i]<=m ; i++ ) { if( m % prime[i] == 0 ) { tmp = 0; while( m % prime[i] == 0 ) { tmp ++; m /= prime[i]; } ret = ret * ( tmp+1 ); } } if( m != 1 ) ret = ret * 2; return ret; } int main( ) { int n,t; int max, ret; Initprime( ); cin>>n; max=1;t=1; for( int i=1; i<=n; i++ ) { ret=Div(i); if( ret > max ) { max = ret;t=i; } } cout<<t<<" "<<max<<endl; return 0; }