| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:__int64 0 毫秒水过 ;In Reply To:__int64 0 毫秒水过 ; Posted by:117474335 at 2010-09-25 17:54:33 > #include <stdio.h>
> #include <math.h>
> #include <stdlib.h>
>
> __int64 n, m, pri[16], k = 0 , ans = 0 ;
>
> __int64 pow1 (__int64 x, __int64 y)
> {
> __int64 i, t = 1;
> for (i = 1; i <= y ; i ++ )
> t *= x ;
> return t ;
> }
>
> void dfs (__int64 a[], __int64 nu )
> {
> __int64 i , t ;
> if (nu > a[0]){
> t = m ;
> for (i = 1; i <= a[0]; i ++ )
> t /= pri[a[i]] ;
> t = pow1 (t, n) ;
> if (a[0] % 2) t = -t ;
> ans += t ;
> return ;}
> if (nu == 1) i = 1 ;
> else i = a[nu - 1] + 1 ;
> for (; i <= k - a[0] + nu ; i ++ ){
> a[nu] = i ;
> dfs (a, nu + 1 ) ;}
> }
>
> main ()
> {
> __int64 i , j, t , q[20] ;
> scanf ("%I64d%I64d", &n, &m ) ;
> j = m ;
> t = sqrt (m) ;
> for (i = 2 ;i <= t ;i ++ )
> if (m % i == 0 ){
> while (m % i == 0)
> m /= i ;
> pri[ ++ k ] = i ;}
> if (m != 1) pri[ ++ k] = m ;
> m = j ;
> ans = pow1 (m, n) ;
> for (i = 1; i <= k ;i ++ ){
> q[0] = i ;
> dfs (q, 1) ;}
> printf ("%I64d\n", ans) ;
> system ("pause") ;
> }
自己写了半天,也没写出一个高精度的算法来,气死我了!
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator