题目链接: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; }
没有梦想,何谈远方