问题分析
如:整数 4,有1, 4, 2 共3个因子。
现在就是输入一个数num,求其因子数。
方法:判断数,如果数不为1,则其因子数起码有两个,(自身和1)
然后从i=2开始到sqrt(num)做循环,如果num%i==0,则因子数+2
当然如果两个因子数相同,是必须要去重的
思路优点
由于循环做的好,没有了类似于24 = 4*6 = 6*4的这种困扰
代码
#include <iostream>
#include <cmath>
using namespace std;
int num(int n){ //返回的是因子总数
int count=2;
for(int i=2;i<=sqrt(n);i++){
if(n%i==0){
if(i==sqrt(n) && n/i==i){ //如果两因子相同,则只加1
count++;
}
else count+=2;
}
}
return count;
}
void main(){
int n;
cin>>n;
if(n==1) cout<<1<<endl; //如果1
else cout<<num(abs(n))<<endl;//负数就把它变成证书考虑,正数不变
}
截图:
表示5的因子数有2个