【欧拉计划第 12 题】 高度可除的三角数 Highly divisible triangular number

简介: 【欧拉计划第 12 题】 高度可除的三角数 Highly divisible triangular number

Problem 12 Highly divisible triangular number

The sequence of triangle numbers is generated by adding the natural numbers. So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28 1 + 2 + 3 + 4 + 5 + 6 + 7 = 281+2+3+4+5+6+7=28. The first ten terms would be:

1 , 3 , 6 , 10 , 15 , 21 , 28 , 36 , 45 , 55 , . . . 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...1,3,6,10,15,21,28,36,45,55,...

Let us list the factors of the first seven triangle numbers:

We can see that 28 2828 is the first triangle number to have over five divisors.

What is the value of the first triangle number to have over five hundred divisors?

问题 12 高度可除的三角数

三角数由依次排列的自然数的和生成。所以第 7 77 个三角数是 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28 1 + 2 + 3 + 4 + 5 + 6 + 7 = 281+2+3+4+5+6+7=28。前十项是:

1 , 3 , 6 , 10 , 15 , 21 , 28 , 36 , 45 , 55 , . . . 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...1,3,6,10,15,21,28,36,45,55,...

让我们列出前七个三角数的因数:

我们可以看到 28 2828 是第一个有五个以上除数(因子)的三角数。

第一个有超过 500 500500 个除数(因子)的三角数的值是多少?

思路分析

拿到题目,我们首先做的要理解清除题目含义,对于从未听过的陌生概念、术语(一般会举例说明),我们也要试着首先理解示例

这里解释下题目中的三角数是如何得出的,请看下表计算过程

第 x 个 三角数值 计算过程
1 1 1
2 3 1+2=3
3 6 1+2+3=6
4 10 1+2+3+4=10
5 15 1+2+3+4+5=15
6 21 1+2+3+4+5+6=21
7 28 1+2+3+4+5+6+7=28

依然是老朋友,暴力枚举,从 1 11 开始依次枚举每个数字并判断它有多少个约数

当约数个数大于 500 500500 时,退出循环并输出该值

代码实现

/*
 * @Author: coder-jason
 * @Date: 2022-04-19 20:58:43
 * @LastEditTime: 2022-04-19 21:58:30
 */
#include <bits/stdc++.h>
using namespace std;
int factor(long long n) // 计算数字 num 因数个数 , 注意数据范围
{                     
    int count = 0;
    for (long long i = 1; i * i <= n; i++)
    {
        if (n % i == 0)
        {
            if (i * i == n)
                count++;
            else
                count += 2;
        }
    }
    return count;
}
int main()
{
    int num = 0;
    for (long long i = 1;; i++)
    {
        num += i;              // 枚举三角数 循环过程可参照末尾注解
        if (factor(num) > 500) // 传值给 facto() 返回 num 因数个数
        {
            cout << num << endl; // 满足条件"第一个有超过 500 个因子"的三角数时,输出 num 值
            break;               // 循环结束
        }
    }
    return 0;
} // num i num+=i; 过程演示
  // 0 1
  // 1 2
  // 3 3
  // 6 4
  // 10 5

答案:76576500


本题在完成三角数的枚举后,最重要的一步是如何判断一个数约数的个数

从基本思想不断优化,降低算法的时间复杂度,详请参考快速计算约数的个数——从基础到高级



相关文章
|
9月前
|
Android开发 iOS开发
Cellular Matrix 蜂窝矩阵(一)
最近的新项目要在兴趣选择的标签上做一些文章,看了一些国内需要兴趣选择的APP的样式,基本都是不规则的横向排列标签选择模式,基本都是用`CollectionView`配合着自己重新写的`FLowLayout`进行重新的布局排布。然而,虎嗅APP的兴趣选择标签的样式倒是很独特,用了一种类似蜂窝样式的排布来进行选择,同时还配合动画效果,进一步的提升了用户的体验感受。但是只是在安卓版本的虎嗅APP才有,iOS版本的并没有体验到。
|
5月前
|
机器学习/深度学习
下三角矩阵(Lower Triangular Matrix)
下三角矩阵(Lower Triangular Matrix)是一种特殊形式的矩阵,其非零元素仅位于主对角线以下。在数学和工程领域中,下三角矩阵通常用于线性代数和微积分等问题。以下是一些关于下三角矩阵的特点和应用:
433 1
|
5月前
|
机器人 Python
凸包(Convex Hull)
凸包(Convex Hull)是一个计算几何中的概念,它表示在平面上或空间中一组点集的最小凸包。简单来说,就是一个凸多边形,这个多边形的所有顶点都是点集中最外部的点,且所有内部角都小于 180 度。凸包的计算可以用于许多场景,如碰撞检测、数据压缩和最近邻搜索等。
65 6
|
5月前
|
机器学习/深度学习
上三角矩阵(Upper Triangular Matrix
上三角矩阵(Upper Triangular Matrix)是一种特殊形式的矩阵,其非零元素仅位于主对角线以上。在数学和工程领域中,上三角矩阵通常用于线性代数和微积分等问题。以下是一些关于上三角矩阵的特点和应用:
413 0
|
5月前
三对角矩阵(Triangular Matrix)
三对角矩阵(Triangular Matrix)是一种特殊形式的矩阵,其非零元素仅位于主对角线以及主对角线两侧的相邻对角线上。三对角矩阵在数学、工程和计算机科学等领域中都有广泛应用,特别是在线性代数中。以下是一些关于三对角矩阵的特点和应用:
282 6
|
8月前
UVa1584 - Circular Sequence
UVa1584 - Circular Sequence
23 0
|
人工智能
CodeForces-Kuroni and Impossible Calculation(思维+鸽巢原理)
CodeForces-Kuroni and Impossible Calculation(思维+鸽巢原理)
63 0
【欧拉计划第 5 题】最小公倍数 Smallest multiple
【欧拉计划第 5 题】最小公倍数 Smallest multiple
124 0
【欧拉计划第 5 题】最小公倍数 Smallest multiple
|
人工智能
Kuroni and Impossible Calculation——容斥原理-鸽笼原理-抽屉原理
题目描述 已知一个数组a[n],请计算式子:∏_{1≤i<j≤n}|ai−aj| 的值,其中1<=i,j<=n;我们可以认为,这一式子等价于 |a1−a2|⋅|a1−a3|⋅ … ⋅|a1−an|⋅|a2−a3|⋅|a2−a4|⋅ … ⋅|a2−an|⋅ … ⋅|an−1−an|
91 0
Kuroni and Impossible Calculation——容斥原理-鸽笼原理-抽屉原理