BZOJ 4173: 数学

4173: 数学

Time Limit: 10 Sec  Memory Limit: 256 MB
Submit: 462  Solved: 227
[Submit][Status][Discuss]

Description

 

Input

 输入文件的第一行输入两个正整数 。 

Output

 如题

Sample Input

5 6

Sample Output

240

HINT

 

 N,M<=10^15

 

Source

 
[Submit][Status][Discuss]

 

据说单个欧拉函数$phi(N)$可以在$O(\sqrt{N})$的时间内求出来,所以只关心$\sum_{k\in S(n,m)}{\phi{k}}$是什么。看下PoPoQQQ。

n%k+m%k≥k等价于⌊n+mk⌋−⌊nk⌋−⌊mk⌋=1 
无视掉前面的
φ(n)∗φ(m)的话答案就是 
∑n%k+m%k≥kφ(k)
 
=∑n+mk=1φ(k)∗⌊n+mk⌋−∑nk=1φ(k)∗⌊nk⌋−∑mk=1φ(k)∗⌊mk⌋

那么∑nk=1φ(k)∗⌊nk⌋又是什么呢? 
∑ni=1i=∑ni=1∑k|
iφ(k)=∑nk=1φ(k)∗⌊nk⌋

因此答案为φ(n)∗φ(m)∗(∑n+mi=1i−∑ni=1i−∑mi=1i)=φ(

 

 1 #include <cstdio>
 2 
 3 typedef long long lnt;
 4 
 5 __inline lnt phi(lnt n)
 6 {
 7     lnt r = n;
 8     
 9     for (lnt i = 2; i*i <= n; ++i)
10         if (n % i == 0)
11         {
12             r = (r / i) * (i - 1);
13             while (n % i == 0)n /= i;
14         }
15         
16     if (n != 1)r = (r / n) * (n - 1);
17     
18     return r;
19 }
20 
21 const lnt mod = 998244353LL;
22 
23 lnt n, m;
24 
25 signed main(void)
26 {
27     scanf("%lld%lld", &n, &m);
28     printf("%lld\n", 
29         ((phi(n) % mod) * (phi(m) % mod) % mod)
30     *    ((n % mod) * (m % mod) % mod) % mod);
31 }

 

@Author: YouSiki

 

posted @ 2017-02-18 19:25  YouSiki  阅读(293)  评论(0)    收藏  举报