因数:整数B能整除整数A,A叫作B的倍数,B就叫做A的因数或约数
三角形数:1,3,6,10,15,21……这些数量的,都可以排成三角形,像这样的数称为三角形数,如:
1…………………………1
1 2……………………….3
1 2 3……………………..6
1 2 3 4…………………..10
题目的关键是:使用最短的时间求出一个数的因数(n)的个数(count)
我们发现:
(1)若存在n=(n/2)^2,有如下:
- i<n/2时,若n%i==0,count+=2
- i=n/2时,若n%i==0,count+=1
(2)若不存在n=(n/2)^2,有如下:
- i<sqrt(n)时,若n%i==0,count+=2
算法到此结束。
代码如下:
#include <iostream>
#include <time.h>
using namespace std;
int count(int n)
{
int sum = 0;
for(int i = 1;i*i <= n;++i)
{
if(n%i==0)
{
sum+=2;
if(n/i==i)
--sum;
}
}
return sum;
}
int main()
{
clock_t start, end;
start = clock();
int m=0;
for(int i=1; ;++i)
{
m+=i;
if(count(m)>=500)
break;
}
end = clock();
cout<<m<<endl;
cout<<"Run time: "<<(double)(end - start) / CLOCKS_PER_SEC<<"S"<<endl;
return 0;
}