zoukankan      html  css  js  c++  java
  • 整除分块

    整除分块

    整除就是快速求得一个数被一个范围的所有数除的结果之和的一个解决方法
    通过随便举一个例子,发现这样的结果大多都会有一些数重复且连续的出现,这时只需求得数量后直接得乘积加到sum里面就可以了

    对于被除数k,发现结果i出现的长度其实是 floor(k/(i-1))+1-floor(k/i)
    代码过水

    附上例题
    我谷P2261 [CQOI2007]余数求和代码

    #include<iostream>
    using namespace std;
    long long n,len,sum,k;
    int main()
    {
    	cin>>n>>k;
    	for(long long i=1;i<=n;i=k/(k/i)+1){
    		if(k/i==0) break;
    		len=min(n+1,k/(k/i)+1)-i;
    		sum+=(k/i)*((i+i+len-1)*len/2);
    	}
    	cout<<-sum+k*n;
    	return 0;
    }
    

    end

  • 相关阅读:
    window
    pages
    百度小程序 配置 app.json 文件
    JavaScript Cookie
    jQuery ajax
    jQuery ajax
    jQuery ajax
    jQuery
    jQuery
    jQuery
  • 原文地址:https://www.cnblogs.com/XJack/p/12356382.html
Copyright © 2011-2022 走看看