`
zhou_zhihao
  • 浏览: 55700 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

问题12-求因子个数超过500个的第一个三角数

J# 
阅读更多

问题描述如下:

三角数为符合如下标准:

第7个数为1+2+3+4+...+7=28,前几个三角数为:1,,3,6,10,15,21,28......

让我们来看一下他们的因子:

1:1

3:1,3

6:1,2,3,6

10:1,2,5,10

15:1,3,5,15

21:1,3,7,21

28:1,2,4,7,14,28

因子个数超过5的第一个三角数为28,求因子个数超过500个的第一个三角数?

 

代码实现如下:

 

/**
	 * 获得n的因子的个数
	 * 
	 * @param n
	 * @return
	 */
	private static int getFactorNumber(int triangleNumber) {
		int result = 0;
		for (int i = 1; i <= triangleNumber; i++) {
			if (triangleNumber % i == 0) {
				result++;
			}
		}
		return result;
	}

	/**
	 * 获得因子个数超过n个的三角数 此数符合某个标准如下: 如第7个数为1+2+3+4+5+6+7=28,
	 * 前几个数为1,3,6,10,15,21,28,36...
	 * t(n)=n(n+1)/2
	 * @param n
	 * @return
	 */
	private static int getTriangleNumber(int n) {
		int triangleNumber = 0;
		int j = 1;
		int number=0;
		while (number <= n) {
			triangleNumber = j * (j + 1) / 2;
			number = getFactorNumber(triangleNumber);
			System.out.println(number);
			System.out.println(triangleNumber);
			j++;
		}
		return triangleNumber;
	}

 

运行以上程序,要很长时间才能够得到结果76576500。

 

进行一些优化,

 

/**
	 * 获得n的因子的个数
	 * 
	 * @param n
	 * @return
	 */
	private static int getFactorNumber1(int triangleNumber) {
		int result = 0;
		double max = Math.sqrt(triangleNumber);
		for (int i = 1; i <= max; i++) {
			if (triangleNumber % i == 0) {
				result += 2;
			}
			if (i * i == triangleNumber) {//如果i是triangleNumber的平方根,总数减一
				result--;
			}
		}
		return result;
	}

 

还有一些其他的方式来做,可以做一个提示,

1=2^0+3^0+5^0+7^0...+p^0,因子个数为(0+1)*(0+1)*(0+1)...*(0+1)=1

3= 2^0+3^1+5^0+7^0...+p^0,因子个数为(0+1)*(1+1)*(0+1)...*(0+1)=2

6=2^1+3^1+5^0+7^0...+p^0,因子个数为(1+1)*(1+1)*(0+1)...*(0+1)=4

...

28 = 2^2+3^0+5^0+7^1...+p^0,因子个数为(2+1)*(0+1)*(0+1)*(1+1)...*(0+1)=6

...

t(n) = 2^a1+3^a2+4^a3+...+p^ap,因子个数为(a1+1)*(a2+1)*(a3+1)*(a4+1)...*(ap+1)=n

 

到此结束。

 

请不吝赐教。

@anthor ClumsyBirdZ

 

分享到:
评论

相关推荐

    Advanced Bash-Scripting Guide <>

    第一部分. 热身 1. 为什么使用shell 编程 2. 带着一个Sha-Bang 出发(Sha-Bang 指的是#!) 2.1. 调用一个脚本 2.2. 初步的练习 第二部分. 基本 3. 特殊字符 4. 变量和参数的介绍 4.1. 变量替换 4.2. 变量赋值 4.3. ...

    Python案例集锦-0414.docx

    程序3:判断这是一年中的第几天? 3 程序4:判断整数大小 4 程序5:斐波那契数列 5 程序6:水仙花数 6 程序7:数字求和 6 程序8:平方根 7 程序9:if语句 8 程序10:阿姆斯特朗数 8 程序11:输出指定范围的素数...

    Linux高级bash编程

    第一部分. 热身 1. 为什么使用shell编程 2. 带着一个Sha-Bang出发(Sha-Bang指的是#!) 2.1. 调用一个脚本 2.2. 初步的练习 第二部分. 基本 3. 特殊字符 4. 变量和参数的介绍 4.1. 变量替换 4.2. 变量...

    算法导论(part1)

    在不改动数学和分析重点的前提下,作者将第1版中的许多数学基础知识从第一部分移到了附录中。 二、本书的特点 本书在进行算法分析的过程中,保持了很好的数学严谨性。书中的分析和设计可以被具有各种水平的读者所...

    上海电机学院C语言实训答案

    输入一个正整数n (1),再输入n 个整数,将最小值与第一个数交换,最大值与最后一个数交换,然后输出交换后的n 个数。 (25)抓住肇事者 一辆卡车违反交通规则,撞人后逃跑。现场共有三个目击者,但都没有记住车号,...

    《数学·统计学系列:三角级数论》作者:(英)哈代 ,(英)罗戈辛斯基 著,徐瑞云 ,王斯雷 译 出版时间:2013年

    3.7 一个特殊的三角级数 3.8 Fourier级数的积分 3.9 一个基本的收敛定理 3.1 0具有递降系数的级数 3.1 1 具有递降系数的级数 (续) 3.1 2 Gibbs现象 第4章 Fourier级数的收敛性 4.1 引言 4.2 Fourier级数的收敛...

    java 经典习题.doc

    题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程 找出1000以内的所有完数。 【程序10】 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次...

    c程序设计习题参考(谭浩强三版)习题参考解答

    10.3输入10个整数,将其中最小的数与第一个数对换,把最大的一个数与最后一个对换。写3个函数:(1)输入10个数;(2)进行处理;(3)输出10个数。 74 10.4有n个整数,使其前面各数顺序向后移m个位置,最后m个数...

    leetcode三角形打印-ex_java:java练习题(来源各个地方and难度随机)

    leetcode三角形打印 java基础练习题 1.检查是否为素数(素数:该数除了1和它本身以外不再有其他的因数的数被...8.题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有

    长江三角洲城市群经济发展水平分析——基于因子分析模型

    文中以长三角第一批16个城市为研究对象,选取了具有代表性的11个指标,数据来自2015年上海市、江苏省、浙江省统计年鉴。运用因子分析的方法对该区域各个城市的经济发展水平做定量分析。结果显示:根据综合得分,上海、...

    40个Java算法与数组方面的源码实例集.rar

    40个Java算法与数组方面的源码实例集,这些代码都是比较简单,觉得很实用,...例如6=1+2+3 ,找出1000以内的所有完数、求s=a aa aaa aaaa aa...a的值,其中a是一个数字、输入星期几的第一个字母来判断一下是星期几等。

    c语言题库问题和答案.docx

    循环结构习题:求一个数除以9的商等于它各位数字的平方和 86%(497/575) 14% 2020-4-23 1084 循环结构习题:求最优方案 50%(419/844) 53% 2020-4-23 1085 函数习题:计算公式s=1+1/(1+2)+1/(1+2+3)+…+1/(1+2+…+n)的...

    java经典编程题

    1.输出所有的“水仙花数”,水仙花数是指一个三位数,这个数的各位数字的立方和就是该数本身。 2.将一个正整数分解质因数,如:18=2*3*3;...24.如果一个数恰好等于它的因子之和,则叫“完数”求1000以内所有完数;

    各种c++经典例题,多种编程语言

    题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程  找出1000以内的所有完数。 【程序19】 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在  第10...

    JAVA作业——初学者遇到的java编程题目

    2.一个数如果恰好等于他的因子之和,这个数就称为“完数”,例如6=1+2+3。编程 找出1000以内的所有完数 3.一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求他在第10次落地时,共经过多少米?第10...

    DirectX9 3D游戏设计入门 英文版+中文版+源代码

    第12章 设计一个灵活的Camera类 第13章 地形绘制基础\t 第14章 粒子系统\t 第15章 拾取\t 第Ⅳ部分 着色器和效果 第16章 高级着色语言(HLSL)入门\t 第17章 顶点着色器入门\t 第18章 像素着色器入门\t 第19章 效果...

    MATLAB常用算法

    mulGXF1 用两点割线法的第一种形式求非线性方程组的一个根 mulGXF2 用两点割线法的第二种形式求非线性方程组的一个根 mulVNewton 用拟牛顿法求非线性方程组的一组解 mulRank1 用对称秩1算法求非线性方程组的一个根 ...

    MATLAB语言常用算法程序集

    mulGXF1 用两点割线法的第一种形式求非线性方程组的一个根 mulGXF2 用两点割线法的第二种形式求非线性方程组的一个根 mulVNewton 用拟牛顿法求非线性方程组的一组解 mulRank1 用对称秩1算法求非线性方程组的一个根 ...

    算法导论(part2)

    在不改动数学和分析重点的前提下,作者将第1版中的许多数学基础知识从第一部分移到了附录中。 二、本书的特点 本书在进行算法分析的过程中,保持了很好的数学严谨性。书中的分析和设计可以被具有各种水平的读者所...

    全国青少年信息学奥林匹克联赛培训习题与解答(中学高级本)

    第一章 回溯 1.1马拦过河卒 1.2出栈序列统计 1.3算24点 1.4冗余依赖 1.5走迷宫 1.6 单向双轨道 1.7.组合的输出 1.8售货员的难题 1.9驾车旅游 1.10关路灯 第二章 递规与递推 2.1遍历问题 2.2产生数 ...

Global site tag (gtag.js) - Google Analytics