对于任意给定的一个正整数,计算其因数个数。
输入样例:
6
输出样例:
4
说明:
1、2、3、6都是6的因数。因此,输出4。
我们开始采用暴力穷举法来解,但发现有俩组答案超时了,所以,我们要对代码进行优化,尽量节省循环次数。
问题分析
用穷举法进行计算,尽量减少穷举的次数。
若a*b=n,且a>b,则a和b都是n的因子,所以只需要用1到sqrt(n)进行试探即可。同时需要注意,若a*a=n则a为n的因子(只计数1次);若a*b=n且a!=b则需要计数2次。
像计算平方根这样的计算,要尽量少计算。
最初代码:
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int cnt=0;
for(int i=n/2;i>0;i--)
{
if(n%i==0)
cnt++;
}
cout<<cnt+1<<endl;
return 0;
}
修改后代码:
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
int n;
cin>>n;
int cnt = 0;
int ed = sqrt(n);
for(int i=1; i<=ed; i++)
if(n % i == 0)
cnt += 2;
if(ed * ed == n)
cnt -= 1;
cout<<cnt<<endl;
return 0;
}