1.permutation应该翻译成置换
2.
idempotent function:集合A中的每个元素的对应自己本身的映射
3.集合A有n个元素,那么non-idemponent permutations of a set A的个数为n!-1
4.ans=(n!-1)%(1e9+7)
5.在Visual C++中int型的范围-2147483648~2147483647,简单记忆为-2e9~2e9
6.a*b%c=(a%c*b%c)%c
7.f[n]=n!%c
f[1]=1%c
f[2]=2*1%c=(2%c*f[1])%c
f[3]=3*2*1%c=(3%c*f[2])%c
f[i]=i!%c=(i%c*f[i-1])%c
8.(a-b)%c=(a%c+c-b)%c
9.long long 双长整型 printf("%lld\n",ans); 简单记忆为9e18
10.__int64 of VC is not ANSI, but you can use long long for 64-bit integer
综上,ans=(n!-1)%(1e9+7)=(n!%(1e9+7)+1e9+7-1)%(1e9+7)=(f[n]+c-1)%c
代码:
#include<cstdio>
using namespace std;
long long f[100005];//f[i]=i!%c=(i%c*f[i-1])%c
const int c=1e9+7;
int main()
{
int t,n;
long long ans;//ans=(f[n]+c-1)%c
f[1]=1;
for(int i=2; i<100005; i++)
{
f[i]=(i%c*f[i-1])%c;
}
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
ans=(f[n]+c-1)%c;
printf("%lld\n",ans);
}
return 0;
}