zoukankan      html  css  js  c++  java
  • 【NOIP2016提高A组模拟10.15】算循环

    这里写图片描述
    这里写图片描述

    题解

     我们发现这六重循环有相同的部分,变为三重循环,即:
     for i:=1 to n do
       for j:=i to n do
         for k:=i to j do
    三个for循环。
    然后发现:
      for i:=1 to n do
        for j:=i to n do
    是求1到n的和,
    共循环了n(n+1)/2。
    再发现:
      for j:=i to n do
        for k:=i to j do
    是1的平方加到n的平方,
    共循环了n(n+1)(2n+1)/6。
    因为for j:=i to n do用了两次,
    所以总共循环了:
        (n(n+1)/2)*(n(n+1)(2n+1)/6)/2。
    化简为:(n的三次方+3*n的二次方+2*n)/6。
    因为要mod,要用乘法逆元。
    

    代码

    const
      mo=1000000007;
    var
      n,m,t:int64;
    function try1(f:int64):int64;
    var
      a,b,c:int64;
    begin
      a:=(f*f mod mo)*f mod mo;
      b:=(f*f mod mo)*3 mod mo;
      c:=2*f mod mo;
      exit(((a+b) mod mo+c)*t mod mo);
    end;
    
    begin
      assign(input,'loop.in');
      assign(output,'loop.out');
      reset(input);
      rewrite(output);
      readln(n,m);
      t:=166666668;
      n:=n mod mo;
      m:=m mod mo;
      write(try1(n)*try1(m) mod mo);
      close(input);
      close(output);
    end.
    
    
  • 相关阅读:
    Linux之基础系统优化
    Linux之shell命令
    Django解决跨域问题
    Django中使用geetest验证
    python2与python3的区别
    一个长得很丑的登录和注册
    Django组件-forms组件
    Django组件-中间件
    cookie、session与用户认证组件
    jquery练习
  • 原文地址:https://www.cnblogs.com/zyx-crying/p/9319557.html
Copyright © 2011-2022 走看看