zoukankan      html  css  js  c++  java
  • P3935 Calculating

    洛谷题目链接

    欢乐颓式子

    题目中要求:$$sumlimits_{i=l}^r f(i)$$

    我们首先容斥一下,那么原式表示为:$$sumlimits_{i=1}^r f(i)- sumlimits_{j=1}^{l-1} f(j)$$

    那么我们就要想着求出:$$sumlimits_{i=1}^n f(i)$$

    那么(f(x))怎么求呢,其实(f(x))就是(x)的因数个数,为什么呢?

    我们把(x)分解质因数,假设(x=p_1^{k_1}p_2^{k_2}p_3^{k_3}cdots p_m^{k_m})

    对于每一个(p_i^{k_i})都是质数,它的因数有(p_i^0,p_i^1,p_i^2,cdots,p_i^{k_i}),也就是一共有(k_i+1)个因数

    那么(x)一共就会有((k_1+1)(k_2+1)(k_3+1)cdots (k_m+1))个因数

    所以上面的式子可以化为:$$sumlimits_{i=1}^n sumlimits_{d|i} 1$$

    我们把枚举的东西换一下,我们枚举所有的因数:

    [sumlimits_{d=1}^n leftlfloor frac{n}{d} ight floor ]

    那么上式我们就可以用整除分块来做,如果不会整除分块的话,可以看看我的另一篇博客

    接下来是美滋滋的代码时间~~~

    
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define mod 998244353
    #define int long long
    using namespace std;
    int l,r;
    int Get(int x)
    {
    	int ans=0;
    	for(int i=1,j;i<=x;i=j+1)
    	{
    		j=x/(x/i);
    		ans=(ans+(((x/i)%mod)*((j-i+1)%mod)%mod)%mod)%mod;
    	}
    	return ans;
    }
    signed main()
    {
    	scanf("%lld%lld",&l,&r);
    	printf("%lld",(Get(r)-Get(l-1)+mod)%mod);
    	return 0;
    }
    
    
  • 相关阅读:
    three.js详解
    Javascript的原型
    Transform? Transition? Animation?
    Backbone源码分析Backbone架构+流程图
    对象是引用的注意原型中的属性改变
    MySQL+ JSP+Tomcat開發指引
    MySQL應用分析
    SQL 日期
    MySQL安裝
    MSE错误应对分享
  • 原文地址:https://www.cnblogs.com/yexinqwq/p/11102749.html
Copyright © 2011-2022 走看看