1. 约数个数
约数,就是因数,举一个例子你就明白:
比如数字18, 它的约数有1,2,3,6,9,18,一共6个约数,所以18的约数个数就是6.
但是在C++中,并没有什么可以直接表示打印出某个数的约数,但是我们仔细想想。数字a的约数,不就是被a整除的数吗?被a整除的数,不就是除以a的余数是0的数吗?所以我们有了表达式:
int cnt = 0;
for(int i = 1;i <= a;++i)
if(a % i == 0) ++cnt;
这里我要介绍一下什么是cnt。cnt就是count的缩写形式。意思就是说只要有一个i是a的约数,我们就让cnt加上1.到最后只要看看cnt是几就可以了。
2. 约数和
搞定了约数个数之后,约数和也就迎刃而解了。你看,这个i不是a的约数吗?那我可以让cnt加上1的同时让sum(总和变量)加上i(如下图所示)↓↓↓
int cnt = 0, sum = 0;
for(int i = 1;i <= a;++i)
if(a % i == 0) ++cnt, sum += i;
这里千万要小心!如果a是200000000的话,a没有超过int范围吗,但是它的最大的两个约数2000000000和100000000的和已经是3000000000了,远远超过了int的最大范围2147483647,所以sum已经要是long long类型的变量。
int cnt = 0;
long long sum = 0;
这样一来,到最后约数个数搞定了,约数和也搞定了,真是两全其美!
3.完整代码
注意声明变量的数据类型,就可以写出一个完整的代码了!
#include<cstdio>
int main () {
int cnt = 0, a;
long long sum = 0;
scanf("%d", &a);
for(int i = 1;i <= a;++i)
if(a%i == 0) ++cnt, sum += i;
printf("%d的约数个数:%d个\n", a, cnt);
printf("%d的约数和:%d\n", a, sum);
return 0;
}
4.运行样例
886~