應該算是個純數學題@@不過因為原式有點醜,所以用遞迴的方式把他AC掉了
題目要求:
用這兩個性質:
#include<stdio.h> #include<algorithm> #include<math.h> #define LL long long int using namespace std; LL f(LL N,LL q,LL p) { //printf("call f(%d,%d,%d)\n",N,q,p); if((N*q/p)==0) return 0; if(q%p==0) return N*(N+1)/2*(q/p); if(q>p) return f(N,q%p,p) + N*(N+1)/2*(q/p); return N*((N*q)/p) - f(N*q/p,p,q)+N/p; } int main() { LL n,a,b; while(scanf("%I64d %I64d %I64d",&n,&a,&b)!=EOF) printf("%I64d\n",f(n,a/__gcd(a,b),b/__gcd(a,b))); return 0; }
沒有留言:
張貼留言