zoukankan      html  css  js  c++  java
  • bzoj4176 Lucas的数论

    Lucas的数论

    Time Limit: 30 Sec Memory Limit: 256 MB

    Description

    去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了。

    在整理以前的试题时,发现了这样一道题目“求Sigma(f(i)),其中1<=i<=N”,其中 表示i的约数个数。他现在长大了,题目也变难了。
    求如下表达式的值:

    其中 表示ij的约数个数。
    他发现答案有点大,只需要输出模1000000007的值。

    Input

    第一行一个整数n。

    Output

    一行一个整数ans,表示答案模1000000007的值。

    Sample Input

    2

    Sample Output

    8

    HINT

    对于100%的数据n <= 10^9。




    出门左转bzoj3994就好了。。。。

    
    #include<bits/stdc++.h>
    using namespace std;
    const int N = 2500000, mod = 1e9 + 7;
    long long mu[N];
    bool not_prime[N];
    int tot, n, prime[N];
    map<int, long long> f, MU;
    
    inline void prepare()
    {
    	mu[1] = 1;
    	for(int i = 2; i < N; ++i){
    		if(!not_prime[i]){
    			prime[++tot] = i; mu[i] = -1;
    		}
    		for(int j = 1; prime[j] * i < N; ++j){
    			not_prime[i * prime[j]] = true;
    			if(i % prime[j] == 0){mu[i * prime[j]] = 0; break;}
    			mu[i * prime[j]] = -mu[i];
    		}
    	}
    	for(int i = 2; i < N; ++i) mu[i] = (mod + mu[i - 1] + mu[i]) % mod;
    }
    
    inline int F(int t)
    {
    	int last; int ret = 0;
    	if(f[t]) return f[t];
    	for(int i = 1; i <= t; i = last + 1){
    		last = min(t, t / (t / i));
    		ret =  (ret + (last - i + 1) * (t / i) % mod) % mod;
    	}
    	return f[t] = ret;
    }
    
    long long Mu(long long t)
    {
    	if(t < N) return mu[t];
    	if(MU[t]) return MU[t];
    	long long ret = 1, last;
    	for(long long i = 2; i <= t; i = last + 1){
    		last = min(t, (t / (t / i)));
    		ret = (ret + mod - (last - i + 1) * Mu(t / i) % mod) % mod;
    	}
    	if(t == 0) ret = 0;
    	return MU[t] = ret;
    }
    
    inline void workk()
    {
    	long long ans = 0, last;
    	for(long long i = 1; i <= n; i = last + 1){
    		last = min((long long)n, (n / (n / i)));
    		ans = (ans + mod + (Mu(last) - Mu(i - 1)) * F(n / i) % mod * F(n / i)) % mod;
    	}
    	cout << ans;
    }
    
    int main()
    {
    	prepare();
    	scanf("%d", &n);
    	workk();
    	return 0;
    }
    
    
    心如花木,向阳而生。
  • 相关阅读:
    你的代码真的很健壮吗
    GAE 博客——B3log Solo 0.1.1 发布预告
    GAE 博客——B3log Solo 0.1.1 发布了!
    GAE 博客——B3log Solo 0.1.1 发布了!
    使用logcxx库和boost库构建系统日志的格式化输出
    Simple Hierarchical clustering in Python 2.7 using SciPy
    将python3.1+pyqt4打包成exe
    Installation — SIP 4.14.2 Reference Guide
    PyQt 维基百科,自由的百科全书
    沙湖王 py行者
  • 原文地址:https://www.cnblogs.com/LLppdd/p/9214416.html
Copyright © 2011-2022 走看看