描述
每一个数字都有自己的实力,我们可以从不同的角度来描述数字的实力。我们做出如下定义:一个数字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;
}