- 5000ms 内存限制:
- 32768kB
-
整数的因子数为包含它自身的所有因子的个数。例如:12的因子为1,2,3,4,6,12,所以12的因子数为6。给定整数n,计算其因子数。
输入
- 输入数据中含有一些整数n(1≤n<2^32)。 输出
- 对于每个n,以一行的形式输出整数自身加冒号与空格,再输出其因子数。 样例输入
-
11 22 33 24
样例输出
-
11: 2
-
22: 4
-
33: 4
-
24: 8
F:整数的因子数
-
总时间限制:
-
描述
这道题其实真的真的很简单,就像求素数那样,单个枚举,从1到sqrt(n),但是我第一次提交的时候犯了一个错误,就是把sqrt放在了for循环的判断里面,这导致他每次都要计算一次这个数是多少,然后就超时了。但是先算一次,让mid = sqrt(n),用mid代替一开始sqrt的位置就不会超时了。
代码如下:
#include<stdio.h>
#include<math.h>
int main()
{
long long i,sum,a,mid;//题目是说2^32次方,这里c语言要用到无符号长整型,c++里面直接是无符号整形,我就直接打个long long吧,都一样
while(scanf("%lld",&a) != EOF)
{
mid = sqrt(a);
for(i = 1, sum = 0; i <= mid; i++)//一开始我在mid这里放的是sqrt(),就超时了
{
if(a % i == 0)
{
if(i != sqrt(a))
sum += 2;
else
sum += 1;
}
}
printf("%lld: %lld\n",a,sum);
}
}