zoukankan      html  css  js  c++  java
  • 4755. 快速荷叶叶变换

    Description

    Input

    一行,包含两个整数N,M。

    Output

    1个整数,FHT(N,M) mod 1000000007的值。

    Sample Input

    3 4

    Sample Output

    1

    Data Constraint

    对于 40% 的数据,1 ≤ N,M ≤ 1000
    对于 60% 的数据,1 ≤ N,M ≤ 10^6
    对于 100% 的数据,1 ≤ N,M ≤ 10^9
     
    做法:可以看出,题目可以变为,Σn-n/i * i 这样一来问题就变成了如何快速求解n/i * i ,我们发现n/i最多有根号n个值,并且相同的值肯定是连续一段的,这样我们就可以用等差数列求和。
     1 #include <cstdio>
     2 #include <iostream>
     3 #include <cmath>
     4 #define mo 1000000007
     5 #define LL long long
     6 using namespace std;
     7 LL n,m,ans1,ans2;
     8 
     9 LL Calc(LL n){
    10     LL i=1,sum=0;
    11     for(;i<=n;){
    12         LL k=n/i,kk=n/k;
    13         sum=(sum+k*(i+kk)*(kk-i+1)/2)%mo;
    14         i=kk+1;
    15     }
    16     sum=((n*n%mo-sum)%mo+mo)%mo;
    17     return sum;
    18 }
    19 
    20 int main(){
    21     scanf("%lld%lld",&n,&m);
    22     ans1=Calc(n);
    23     ans2=Calc(m);
    24     cout<<(ans1*ans2)%mo;
    25 }
    View Code
  • 相关阅读:
    Android中得到布局文件对象有三种方式
    android中的键值对
    .length()与.length与.size()
    异常处理
    Python操作Excel
    写一个简单的爬虫(博客)
    开发一个登录接口(Mysql)
    常用模块
    内置函数
    装饰器
  • 原文地址:https://www.cnblogs.com/traveller-ly/p/9651081.html
Copyright © 2011-2022 走看看