0

0

两两乘积之和

WBOY

WBOY

发布时间:2023-09-11 19:33:02

|

1660人浏览过

|

来源于tutorialspoint

转载

两两乘积之和

集合X = {a, b, c}的成对乘积可以定义为所有可能的集合对乘积的和。集合的成对为Y = {a * a, a * b, a *c, b * b, b * c, c * c},其中乘积是可交换的。因此,集合X的成对乘积是集合Y的元素之和,即aa + ab + ac + bb + bc + cc。

在数学术语中,可能的配对乘积的总和可以表示为:

$$\mathrm{\displaystyle\sum\limits_{i=1,j=i}^{i\leq n,j\leq n}\:(i,j)=i\time j}$$

问题陈述

给定一个数字n。在范围(1,n)内,包括n和1,找到成对乘积的总和。

示例示例1

Input: n = 4
Output: 65

Explanation

的中文翻译为:

解释

i的范围从1到4,j的范围从i到4。

1*1 + 1*2 + 1*3 + 1*4 + 2*2 + 2*3 + 2*4 + 3*3 + 3*4 + 4*4 = 1 + 2 + 3 + 4 + 4 + 6 + 8 + 9 + 12 + 16 = 65

示例示例2

Input: n = 10
Output: 1705

Explanation

的中文翻译为:

解释

i的范围从1到10,j的范围从i到10。

1*1 + 1*2 + … + 1*10 + 2*2 + 2*3 + … + 2*10 + 3*3 + 3*4 + … + 3*10 + 4*4 + 4 *5 + … 4*10 + 5*5 + 5*6 + … + 5*10 + 6*6 + 6*7 + … 6*10 + 7*7 + 7*8 + … 7*10 + 8* 8 + 8*9 + 8*10 + 9*9 + 9*10 + 10*10 = 1705

方法一:暴力破解方法

解决这个问题的蛮力解法是使用两个for循环迭代范围内的所有可能的数对,其中第一个循环从1到n迭代,第二个循环从第一个数迭代到n。

伪代码

procedure pairwiseProduct (n)
   sum = 0
   for i = 1 to n
      for j = i to n
         sum = sum + (i * j)
end procedure

示例:C++实现

在以下程序中,我们找到所有可能的配对,然后找到乘积的和。

#include 
using namespace std;

// Function to find pairwise product over the range 1 to n, 1 and n inclusive
unsigned long long pairwiseProduct(unsigned int n){
   unsigned long long sum = 0;
   
   // First number: 1 <= i <= n
   for (unsigned int i = 1; i <= n; i++){
   
      // Second number: i <= j <= n
      for (unsigned int j = i; j <= n; j++){
         sum += i * j;
      }
   }
   return sum;
}
int main(){
   unsigned long long n = 9;
   cout << "Pairwise Product = " << pairwiseProduct(n);
   return 0;
}

输出

Pairwise Product = 1155

时间复杂度 - O(n^2)

空间复杂度 - O(1)

廊坊供求信息网
廊坊供求信息网

1:强大的用户管理面版2:分为无需注册的免费发布和VIP注册发布/管理两个系统功能3:注册简便,发布信息管理信息等都相当简单4:用户积分制度5:4 个非常实用的道具(在后台设置道具参数)标题变色道具 (改变标题颜色)信息置顶道具 (能使发布信息置顶,使用个数越多,位置越高)内容贴图道具 (可以发和信息相关的图片)通过验证道具 (可不通过管理员审核,直接发布)6:采用虚拟货币制度,可以在线购买虚拟货

下载

方法二

以n = 4为例,

I = 1*1 + 1*2 + 1*3 + 1*4 + 2*2 + 2*3 + 2*4 + 3*3 + 3*4 + 4*4

在简化上述内容时,

I = 1*1 + (1+2)*2 + (1+2+3)*3 + (1+2+3+4)*4

取prefix_sum[1] = 1,

前缀总和[2] = 1+2,

前缀总和[3] = 1+2+3,

前缀总和[2] = 1+2,

伪代码

procedure pairwiseProduct (n)
   sum = 0
   prefixSum = 0
   for i = 1 to n
      prefixSum = prefixSum + 1
      sum = sum + i * prefixSum
end procedure

示例:C++实现

在下面的程序中,我们找到每次迭代的和,即前缀和,并乘以迭代次数,然后在每一步中加到最终和中。

#include 
using namespace std;

// Function to find pairwise product over the range 1 to n, 1 and n inclusive
unsigned long long pairwiseProduct(unsigned int n){
   unsigned long long sum = 0;
   unsigned long long prefixSum = 0;
   for (unsigned int i = 1; i <= n; i++){
      prefixSum += i;
      sum += i * prefixSum;
   }
   return sum;
}
int main(){
   unsigned long long n = 9;
   cout << "Pairwise Product = " << pairwiseProduct(n);
   return 0;
}

输出

Pairwise Product = 1155

结论

总之,对于在范围1到n内的数字的两两乘积之和的求解,我们可以采用上述两种方法之一,其中第一种方法是暴力法,时间复杂度为O(n^2),第二种方法是使用前缀和来计算两两乘积之和的优化方法,时间复杂度为O(n)。

相关专题

更多
C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

7

2026.01.23

php远程文件教程合集
php远程文件教程合集

本专题整合了php远程文件相关教程,阅读专题下面的文章了解更多详细内容。

22

2026.01.22

PHP后端开发相关内容汇总
PHP后端开发相关内容汇总

本专题整合了PHP后端开发相关内容,阅读专题下面的文章了解更多详细内容。

17

2026.01.22

php会话教程合集
php会话教程合集

本专题整合了php会话教程相关合集,阅读专题下面的文章了解更多详细内容。

17

2026.01.22

宝塔PHP8.4相关教程汇总
宝塔PHP8.4相关教程汇总

本专题整合了宝塔PHP8.4相关教程,阅读专题下面的文章了解更多详细内容。

9

2026.01.22

PHP特殊符号教程合集
PHP特殊符号教程合集

本专题整合了PHP特殊符号相关处理方法,阅读专题下面的文章了解更多详细内容。

9

2026.01.22

PHP探针相关教程合集
PHP探针相关教程合集

本专题整合了PHP探针相关教程,阅读专题下面的文章了解更多详细内容。

7

2026.01.22

菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

27

2026.01.22

Golang 性能分析与pprof调优实战
Golang 性能分析与pprof调优实战

本专题系统讲解 Golang 应用的性能分析与调优方法,重点覆盖 pprof 的使用方式,包括 CPU、内存、阻塞与 goroutine 分析,火焰图解读,常见性能瓶颈定位思路,以及在真实项目中进行针对性优化的实践技巧。通过案例讲解,帮助开发者掌握 用数据驱动的方式持续提升 Go 程序性能与稳定性。

9

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CSS3 教程
CSS3 教程

共18课时 | 4.8万人学习

Git 教程
Git 教程

共21课时 | 2.9万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号