1.
费马小定理:\(a^{-n}\) \(mod\) \(p=a^{p-n-1}\) \(mod\) \(p\)(\(p\)为质数)
由题目可知\(β=V/E\),而结果要求我们对\(β\)排序后取余,即求$α=β $ \(mod\) \(N (N=1e9+7)\)
所以很容易根据上面的公式推导出\(α=V*E^{p-2}\) \(mod\) \(p\)
接下来就可以用快速幂的取余算法算出\(E^{p-2}\) \(mod\) \(p\)(),最后再乘\(V\)就可以得到\(α\)。
虽然比赛的时候各种查资料写出了这个算法,但是读题不仔细,没有注意到要对\(α\)进行排序输出。
而且这道题在排序输出上面也放置了陷阱,需要先算\(β\)的值,并进行排序,而且排序算法应当对等号两边移向进行乘法比较,避免误差。
赛后AC代码:
#includeusing namespace std;typedef long long LL;const LL N = 1e9 + 7;//定义余数const int MAXN = 2e5 + 5;//定义结构体数组大小struct Node{ LL x, y;}num[MAXN];bool cmp(Node a1, Node a2){ return a1.y*a2.x>a2.y*a1.x;//移向乘法}LL fun(LL a, LL t);//快速幂取余int main(){ int k; LL a, b; cin >> k; for (int i = 0; i 0) { if (t & 1) { ans *= base; ans %= N; } base *= base; base %= N; t >>= 1; } ans = (ans + N) % N; return ans;}