zoukankan      html  css  js  c++  java
  • ACM-ICPC 2018 沈阳赛区网络预赛 G

    很明显,题目给出的an=n*n+n我们分别有求和公式:

    1+2+…+n=(n+1)*n/2

    1^2+2^2+…+n^2=n*(n+1)*(2*n+1)/6

    很显然,题目给出的m,最多存在8个不同的质因数

    那么结合容斥定理,我们最多进行255次求和公式运算,便可以找出结果。

    那么,难点有二:

    其一:如何找出所有质因数?

    由于m<1e8,所有最多存在一个大于1e4的质因数,所以我们只需要先处理掉所有小于1e4的数,如果此时m中还有别的因数,那么这个数字一定是大于1e4的质因数,所以,我们可以以1e4的复杂度,找出每个数的质因数。

     

    其二:如何使用容斥定理:

    容斥定理,我们可以通俗的解释:首先把所有项都加起来,那么多了不需要的质数项,所以我们又一次性,把所有质因数项减去了,但有的项数被减去了两次,比如:6被2和3同时减去了,所以我们又把质数项两两组合加回来……。如此反复,就可以得到正确结果。

    演示一下计算过程:

    对于因数k,总项数n,那么这个质因数一共有m=n/k项

    k^2+(2*k)^2+…+(k*m)^2=k^2*(1^2+2^2+…+m^2)=k^2* m*(m+1)*(2*m+1)/6

    k+(2*k)+…+(k*m)=k*(m+1)*m/2

    将上下两式相加得到结果

    其中因数k可以是质因数,也可以是质因数相乘。

  • 相关阅读:
    laravel
    composer lavarel 安装
    phpstudy 500 Internal Server Error 解决办法
    阿里云php-7.2.12 安装
    mysql索引
    服务器配置-双机热备
    layui动态数据表格-分页
    layui 笔记
    Thinkphp5.1 模板路径报错
    window/linux composer安装/卸载
  • 原文地址:https://www.cnblogs.com/qq936584671/p/9630461.html
Copyright © 2011-2022 走看看