题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4475

题目知识点:二分快速冥  取余打表

解题过程 : 先是推出公式  以下是推出公式的方法

先放两张题目图片

 

 题目图片

 

 

嘿嘿  答案求出来了  又因为这个数实在太大 根据同余定理所以我们每次都判断它是否大于1000003 然后对1000003取余数,就行了,如果输入的数字大于1000003  直接输出0;

打表输出:

#include <stdio.h>
#include <math.h>
#define  s 1000003
int a[s];
int main()
{
   __int64 i = 1,n;
   a[1] = 2;
   for (i = 2 ; i < s ; i ++)
       a[i] = a[i-1]*i*2 % s; 
      
   scanf("%I64d",&n);
    for (i = 1 ; i <= n ; i ++)
    {
      __int64 k;
      scanf("%I64d",&k);
      if (k < s)
          printf("%I64d\n",a[k]);
      else
          printf("0\n");
    }
   return 0;
}

 

 

posted on 2012-12-20 15:04  dark_dream  阅读(171)  评论(0编辑  收藏  举报