hdu 2136

地址:http://acm.hdu.edu.cn/showproblem.php?pid=2136

题意:问一个数n最大的素因子是第几个素数。

mark:之前一直TLE。素数表不打好会TLE,分解素因子的时候不加sqrt优化也会TLE。。。

先打好100w的素数表,把素数的位序标记好,然后从1到sqrt(n)分解n,得到n最大的素因子后,再看是第几个。

代码:

# include <stdio.h>
# include <math.h>


int IsPrime[1000010] ;
int Primes[1000010] ;
int cnt = 0 ;


void init()
{
int i, j ;
for(i = 1 ; i <= 1000000 ; i++) IsPrime[i] = 1 ;
for(i = 2 ; i <= 1000 ; i++)if (IsPrime[i])
{
for (j = i*i ; j <= 1000000 ; j+=i)
IsPrime[j] = 0 ;
}
for(i = 1 ; i <= 1000000 ; i++) if (IsPrime[i])
{
IsPrime[i] = cnt ;
Primes[cnt++] = i ;
}
}


int calc(int n)
{
int i, lim = sqrt(n)+1, rtn = 0 ;
for(i = 1 ; Primes[i] <= lim && n != 1; i++)
{
while (n%Primes[i] == 0)
{
n/=Primes[i] ;
rtn = i ;
}
}
if (n == 1) return rtn ;
return IsPrime[n] ;
}


int main ()
{
int n ;
init() ;
while (~scanf ("%d", &n))
printf ("%d\n", calc(n)) ;
return 0 ;
}



posted @ 2012-02-02 11:54  Seraph2012  阅读(324)  评论(0编辑  收藏  举报