题目链接:https://nanti.jisuanke.com/t/30990
题意:定义S=1×1!+2×2!+⋯+(n−1)×(n−1)!,求 S mod n的结果
思路:看到这样大的数据,第一反应是找规律,而且看到AC人数不断增长,更确信,于是就把n在1~10之间的S mod n打表发现结果都是n-1。 而如果从数学角度出发,(n-1)*(n-1)! = n!-1,所以S = n!-1,则S mod n = (n!-1) mod n = n-1.
代码:
#include "bits/stdc++.h"
using namespace std ;
#define mem(a,b) memset(a,b,sizeof(a))
#define fori(i,l,u) for(int i = l;i < u;i++)
#define forj(j,l,u) for(int j = l;j < u;j++)
#define pb push_back
#define mk make_pair
#define F first
#define S second
typedef long long ll;
typedef pair<int , int > pi;
typedef pair<string ,int > ps;
typedef vector <int > vi;
typedef vector <ll> vl;
typedef vector <pi> vpi;
void init(){
int t;
ll n;
cin >>t;
while (t--) {
cin >>n;
cout <<n-1 <<endl;
}
}
int main()
{
init();
return 0 ;
}
遇到的问题 :对于 (n!-1) mod n 等于多少这个问题,我纠结了一天。当然正常人肯定张口就来 n-1,但是弱智的我还是想了好多。 (n!-1) mod n = (n! mod n - 1 mod n) mod n = -1 mod n = n-1。 因为余数的定义是 n = k*p + r,余数不为负数,像上面那样算出来是 -1 ,即r = -1 ,那么k- -,r = n+(-1)。