B God Create Math 사고방식

B.God Create Math
 
There is a saying: computer was the crystallizationof men' intelligence, but math is  fromgod. Today, god also sends us a problem.
                sin (n! * [ln(n)] * fib(n) %2012)
Some explanations:
In sin(x), x is a radian.
0! = 1, n! = (n-1)! * n (n >= 1).
[x] is the integer part of a floatingnumber.
fib(0) = fib(1) = 1, and fib(n) = fib(n-1)+ fib(n-2) (n >= 2).
Your task is calculating the value with agiven N.
 
Input
 
The first line contains a single integer T,indicating the number of test cases.
Each test case contains one integer N (1<= N <= 1000 000 000).
 
Output
 
For each test case, output the resultrounded to three fractional digits.
 
Sample Input
 




 
Sample Output
 
0.000
0.581
0.978 팀 내 경기에서 이 문제를 냈는데 바로 목유가 n을 알아차렸다!2012가 되면mod2012 나머지 0입니다. 이렇게.
n(n!*[ln(n)]]*fib(n)%2012라는 식으로 말하자면 n이 2012를 넘으면mod2012여0이다. 이렇게 주의하면sin(0)이 0.000이라는 것이다. 여기서 주의하고 2012 이내의 계승과fibnaci의 값을 계산하면 ln용log 함수를 구할 수 있다.나는 직접fibnaci를 매트릭스 곱셈으로 보고 큰fabonaci를 구했다.
#include<stdio.h>
#include<math.h>
#include<string.h>
int a[2100],fib[2100];
void facotoria()    // 
{
   int i;
   a[0]=1;
   a[1]=1;
   for(i=2;i<=2011;i++)     
     a[i]=(a[i-1]*i)%2012;
}

void f()   // fibnaci
{
   int i;
   fib[0]=1;
   fib[1]=1;     
   for(i=2;i<=2011;i++)     
      fib[i]=(fib[i-1]%2012+fib[i-2]%2012)%2012;   
}


int main()
{ 
     facotoria();
     f();
     double ans;
     int n,num;
     scanf("%d",&n);
     while(n--)
     {
         scanf("%d",&num);
         if(num>=2012){printf("0.000
");continue;} // 2011 0.000 0.000 else printf("%.3lf
", sin ( (double) ( (a[num]*fib[num])%2012*(int)log(num) %2012 ) ) ); }

좋은 웹페이지 즐겨찾기