n(n+1)/2是一个数列的元素两两运算后的不重复结果数。如图:

假如数列a = 1,2,3....n。那么该数列内的元素两两相乘,则会构建出上图中的表格,这个表格应该有n x n 个元素。

用程序写出来大概就是这样:

for (int i=; i<n; i++){
for (int j=; j<n; j++){
table[i][j] = a[i]*a[j];
}
}

这段程序准确的描述了我们手工填表的过程,填满整个表一共执行了n*n次操作,产生了一个n*n的结果集,当然也包含大量重复元素。

那么到底有多少重复元素呢? 其实可以通过跟踪整个运算流程来观察出其中的规律。

1.当i=1时, a1 * a1, a1*a2.....a1*an 一切正常。

2.当i=2时, a2 * a1, a2*a2.....a2*an 看到第一项了么,在第一步时已经计算过一次了。

3.当i=3时,a3 * a1, a3*a2, a3* a3....a3*an 第一项在i=1时计算过,第二项在i=2时计算过。

依次类推,可以发现,当i=n的时候,除了an * an 需要计算以外,其他项全都已经计算过了。

现在让我们来一次时光倒流:从i=n的时候开始,他只有最后一次计算是不重复的(an*an),其余n-1次运算都是"徒劳",所以它产生了n-1个重复元素。

             然后是i=n-1的时候,他只有最后两次运算是不重复的(an-1 * an-1, an-1 * an),余下的n-2个计算结果都是重复的。

             一直进行到当i=2的时候,也就是上面描述的第二步,当第一个重复数出现的时候。

      然后就可以把他们都加起来,他们的和就是所有重复数了:r = 1+2+...+n-1

       1    + 2     + ... + n-1 =r

      2 n-1 + n-2 +  ... + 1    =r

      将1式和2式相加=> 2r = n(n-1) => r = n(n-1)/2

得到了重复数r,那么剩下多少不重复的呢? n*n - r = n(n+1)/2  wala~ QED

----Note---

这其实是一个可重复的N choose M 组合问题,而这里的M是2,有时间的话想好好证明一下这个问题

随机推荐

  1. BZOJ 1044: [HAOI2008]木棍分割

    Description 求 \(n\) 根木棍长度为 \(L\) ,分成 \(m\) 份,使最长长度最短,并求出方案数. Sol 二分+DP. 二分很简单啊,然后就是方案数的求法. 状态就是 \(f[ ...

  2. windows下nodejs常见错误

    1.express-session express-session deprecated undefined resave option; provide resave option auth_s e ...

  3. 一个IP多个https站点配置

    在一台主机上放置一个https网站,究竟该怎么配置?对于IIS和Apache以及Nginx等不同的服务器,方法是不同的,网上有很多教程,在此就不再赘述了. 至于一台主机,如何配置多个https网站呢? ...

  4. Eclipse中项目红叉但找不到错误解决方法

    首先windows-show view-problems 根据地址查找错误 若提示: Description    Resource    Path    Location    TypeJava c ...

  5. supervisor的配置

    看了下文档,比较多.http://www.supervisord.org/ 抱着试试又不会怀孕的心态,trying,碰了几鼻子灰,记录如下, 方便大家 1. 安装 easy_install super ...

  6. Visual Studio 2010添加新项缺失[ADO.NET 实体数据模型]解决方法

    当进行ASP.NET MVC项目开发,准备使用EF进行数据库访问,我的开发模式是"Table First".于是,准备在Model目录新建EF的数据表映射文件.可是,在添加新项目窗 ...

  7. 按钮点击事件,打开新的Activity

    按钮点击事件,打开新Activity, 打开网页 findViewById(R.id.btnStartBAty).setOnClickListener(new View.OnClickListener ...

  8. Spring框架学习[IoC容器高级特性]

    1.通过前面4篇文章对Spring IoC容器的源码分析,我们已经基本上了解了Spring IoC容器对Bean定义资源的定位.读入和解析过程,同时也清楚了当用户通过getBean方法向IoC容器获取 ...

  9. ios中的addChildViewController 和 android中的fragment

    刚才突然感觉这2个东西的功能特别像,记录一下,待研究!

  10. [转]Android 学习资料分享(2015 版)

    转 Android 学习资料分享(2015 版) 原文地址:http://www.jianshu.com/p/874ff12a4c01 目录[-] 我是如何自学Android,资料分享(2015 版) ...