.A。オリンピア数学の問題
アリス、学年の学生66 6は、オリンピア数学の問題について考えているが、彼女はそう感じている彼女が泣くことに絶望します。そして彼女の同級生、ボブは、問題についての考えを持っていません。こうして彼は、あなたが彼を助けるために望んでいます。問題は:
私たちは、意味のkを!k個!kは!:
KK×!= 1×2×⋯×(K-1)は、k!= 1 \回2回\ cdots \ \回(K - 1)回K \ K != 1 × 2 × ⋯ × (K - 1 )× K
我々は表しSS Sを:
S = 1×1!+ 2×2!+⋯+ S = 1 \回1!+ 2 \回2!+ \ cdots + S = 1 × 1 !+ 2 × 2 !+ ⋯ +
(N-1)×(N-1)!(N - 1)回(N-1)\!(N - 1 )× (N - 1 )!
次に、SS SモジュールNN nは____________
あなたが整数を与えられているnnはn個。
あなたは計算する必要がSS SモジュロをNN N。
入力
最初の行は、整数含まT(T≤1000)T(T \ル1000)T (T ≤ 1 0 0 0 テストケースの数を表します)。
各テストケースのために、整数有する線が存在するのNN nが。
それが保証される2≤n≤10182\ルN \ル10 ^ {18} 2 ≤ N ≤ 1 0 1 8。
出力
各テストケースのために、整数印刷SS SモジュロをNN N。
ヒント
最初のテストは、次のとおりです。S = 1×1 = 1S = 1回1 \ = 1!S = 1 × 1 != 1、及び11 1モジュロ22 2は、11 1。
第二の試験は:S = 1×1 + 2×2 = 5S = 1回1回2 \ +2 \ = 5!!S = 1 × 1 !+ 2 × 2 != 5、及び55 5モジュロ33 3である22 2。
サンプル入力
2
2
3
サンプル出力
1つの 2
ソリューション
プレイテーブルX-1は、ことが判明した
理由を知らないしばらく押し
CODEを:
1 #include<bits/stdc++.h>
2 using namespace std;
3 #define int long long
4
5 int cal(int x,int p)
6 {
7 int ans = 1;
8 for(int i=1;i<=x;i++)
9 ans*=i,ans%=p;
10 return ans;
11 }
12 void work(int x)
13 {
14 int ans = 0;
15 for(int i=1;i<x;i++)
16 ans =(ans+i*cal(i,x))%x;
17 cout<<x<<" "<<ans<<endl;
18 }
19 signed main()
20 {
21 int T;
22 for(cin>>T;T;T--)
23 {
24 int x;cin>>x;
25 cout<<x-1<<endl;
26 }
27 return 0;
28 for(int i=1;i<=100;i++)
29 work(i);
30 }