10 高度可约的三角形数

三角形数数列是通过逐个加上自然数来生成的。例如,第7个三角形数是 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28。
三角形数数列的前十项分别是: 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, …
让我们列举出前七个三角形数的所有约数:
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
我们可以看出,28是第一个拥有超过5个约数的三角形数。
求第一个拥有超过500个约数的三角形数是多少?

public class TriangularNumber {

	//*********方法一: 使用do...while()循环************
	public static long yueshu(int limit) {
		
		long sum = 0;
		int i = 0;
		int count;
		
		// 求三角形数
		do {
			i = i + 1;
			count = 0; //记录三角形数的约数个数
			sum = sum + i;
				
				//求约数的个数
				for(int j=1;j<=sum;j++) {
					if(sum % j ==0) {
						count++;
					}
				}	
			}	
			while(count <= limit);  //当达到500个约数	
	
		return sum;	
	}
		
	
	//*********方法二: 使用for()循环************
  public static long yueshufor(int limit) {
		
		long sum = 0;
		int count = 0; //记录三角形数的约数个数
		
		// 求三角形数
		for(int i=1;i<Integer.MAX_VALUE;i++) {
			count = 0; //记录三角形数的约数个数
			sum = sum + i;
				
				//求约数的个数
				for(int j=1;j<=sum;j++) {
					if(sum % j ==0) {
						count++;
					}
				}	
				//当达到500个约数
				if(count > limit)  
					break;
			}	
		    
	
		return sum;	
	}

	
	//*********方法三: 参考答案************
	public static long triangular_number(int max) {
		int sum=0;
		for(int i=1;i<Integer.MAX_VALUE;i++) {
			sum = sum +i;
			if(Dixisibility_rule(sum) > max) {
				return sum;
			}
		}
		return -1;
	}
		
	private static int Dixisibility_rule(int num) {
		int prime = (int)Math.sqrt(num);
		int i =1;
		int sum = 0;
		while(i <= prime) {
			if(num%i ==0) {
				sum++;
			}
			i++;
		}
		return prime*prime == num ? 2*sum-1:2*sum;
	}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值