兩個都是一次函數,下取整就是整點個數,兩個函數k剛好成倒數,所以最後發現會組合成一個矩形
(為啥要考慮重複與否的問題???)
然而這樣會不會重複計算點數呢 我們發現因為取的是圖像下的整數點 所以要想重複算必須有整點的交集
然而pq互質,函數值不會有整數,把兩個函數圖像旋轉拼合以後可以發現不會重複算
但是當p和q相等的時候就會有交集了,這樣把對角線上重複算的去掉,
((p-1)/2)((p-1)/2)是矩形中的点数,后面是重复的点(有((p-1)/2)((p-1)/2)个点就有(p-1)/2)个点在对角线上,拼起来会重合)
提出(p-1)/2就是(p2p^2p2−1)/4,p为奇数,平方减一是偶数除以4与本身除以4同效(整数会自动舍弃小数位)
#include<iostream> #include<cstdio> using namespace std; long long p,q; int main(){ scanf("%lld%lld",&p,&q); if(p!=q)printf("%lld",((p-1)/2)*((q-1)/2)); else printf("%lld",p*q/4); }