• GDCPC2021热身


    题目

    Consider n's prime factorization is (n=p_1^{a_1}p_2^{a_2}...p_k^{a_k}), and (lambda(n)=(-1)^{a_1+a_2+...+a_k}).

    Calculate the value of (sum_{i=1}^{n}{sum_{j=1}^{n}{sum_{k=1}^{n}{lambda(i)*lambda(j)*[i|j and j|k]}}}), mod 998244353.

    题解

    交换一下累加次序可得

    [sum_{j=1}^{n}{sum_{k=1}^{n}{sum_{i=1}^{n}{lambda(i)*lambda(j)*[i|j ]*[j|k]}}} ]

    重新排列一下各项

    [sum_{j=1}^{n}{sum_{k=1}^{n}{lambda(j)*[j|k]*(sum_{i=1}^{n}{lambda(i)*[i|j]})}} ]

    令括号内的式子为函数g

    [g(j)=sum_{i=1}^{n}{lambda(i)*[i|j]}=sumlimits_{i|j}{lambda(i)} ]

    可得答案即为

    [sumlimits_{j=1}^{n}{lfloorfrac{n}{j} floor*lambda(j)*g(j)} ]

    观察函数g,可以发现其就是求(j)的关于(lambda)的约数和。约数是成对出现的,总约数个数为(prodlimits_{i=1}^{k}{(a_i+1)})。只有(j)的约数个数为奇数时,函数g的值才为1,否则互相抵消结果为0。当约数个数为奇数时,说明(j)是完全平方数。

    可得答案即为

    [sumlimits_{j=1}^{lfloorsqrt{n} floor}{lfloorfrac{n}{j^2} floor} ]

    #include<iostream>
    using namespace std;
    const int N = 1e5 + 10;
    const int M = 998244353;
    typedef long long ll;
    
    int main() {
    	ll n;
    	ll ans = 0;
    	cin >> n;
    	for(ll i = 1; i * i <= n; i++) {
    		ans += n / (i * i);
    		ans %= M;
    	}	
    	cout << ans << endl;
    }
    
  • 相关阅读:
    dubbo-admin 2.0安装部署
    一文多发神器
    springboot整合druid踩坑记录
    thymeleaf中的重定向的绝对路径问题
    路径问题
    sp_executesql介绍和使用
    java.net.UnknownHostException: api.weixin.qq.com解决办法
    调用百度地图示例
    浅析分布式架构
    城乡医保用户角色未分配修改
  • 原文地址:https://www.cnblogs.com/limil/p/14971907.html
Copyright © 2020-2023  润新知