• 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可以是质因数,也可以是质因数相乘。

  • 相关阅读:
    结对编程第一次作业
    软件工程第三次作业
    软件工程第二次作业
    软件工程第一次作业
    第五次作业(结对第2次)
    第四次作业
    第三次作业
    第二次作业(多图预警)
    第一次作业
    软工第四次作业——结对编程二
  • 原文地址:https://www.cnblogs.com/qq936584671/p/9630461.html
Copyright © 2020-2023  润新知