JZOJ 5425. 【NOIP2017提高A组集训10.25】数论
生活随笔
收集整理的這篇文章主要介紹了
JZOJ 5425. 【NOIP2017提高A组集训10.25】数论
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Description
聰明的0v0正在學習莫比烏斯反演。
她看到了這樣的一道題:有n*m個人站成了一個n*m的方陣……
剩下的題面,聰明的0v0不記得了。但是,她通過自己高超的數論技巧,給出了一個轉化后的模型:給出n和m,求
聰明的0v0當然知道怎么做了,但是她想考考你。
Input
一行三個正整數n,m,p。
Output
一行一個非負整數,設答案為x,輸出x mod p。
Sample Input
1 2 998244353
Sample Output
2
Data Constraint
30% n,m<=2000 p=998244353。
30% n*m<=10^9 n,m<=10^5 p為質數
20% n,m<=10^6 p為質數
20% n,m<=10^7 p為合數
對于所有數據,保證p<=10^9
Solution
這題怎么做呢?莫比烏斯反演?的確可以。
但是打表后發現——最優做法是:輸出 n?m?mod?p 即可。
什么?這也行?
其實,原式的物理意義,就是從坐標原點 (0,0),用每一種合法的斜率,
穿過坐標 [1—n,1—m] 的方陣中的整點的個數,
總數即 n?m 。
Code
#include<cstdio> using namespace std; int n,m,p; int main() {scanf("%d%d%d",&n,&m,&p);printf("%d",(long long)n*m%p);return 0; }總結
以上是生活随笔為你收集整理的JZOJ 5425. 【NOIP2017提高A组集训10.25】数论的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 51Nod 斜率最大
- 下一篇: JZOJ 5421. 【NOIP2017