BC 80 Segment 慢速乘法

2021-07-28 21:44:49 字數 751 閱讀 6502

x+y

=q,

令它和座標軸在第一象限圍成了乙個三角形,然後畫線連線了座標原點和線段上座標為整數的格點.

請你找一找有多少點在三角形的內部且不是線段上的點,並將這個數對p取模後告訴他.

輸入p和q。q是質數且q≤

1018

,1≤p

≤1018

​​分析:

答案的公式是an

s=(q

−2)∗

(q−1

)/2 ;

但是因為p和q的範圍太大!直接乘的話會爆long long!!!

所以需要手動寫快速乘法,類似於快速冪的寫法!!!

#include 

#include

#include

#include

#include

#include

using

namespace

std;

int t;

long

long q,p;

long

long mul(long

long a,long

long b)

return res;

}int main()

long

long t=(q-1)/2%p;

long

long ans=mul(q-2,t);

cout

0;}