题目1087:约数的个数
时间限制:1 秒
内存限制:32 兆
特殊判题:否
-
题目描述:
-
输入n个整数,依次输出每个数的约数的个数
-
输入:
-
输入的第一行为N,即数组的个数(N<=1000)
接下来的1行包括N个整数,其中每个数的范围为(1<=Num<=1000000000)
当N=0时输入结束。
-
输出:
-
可能有多组输入数据,对于每组输入数据,
输出N行,其中每一行对应上面的一个数的约数的个数。
-
样例输入:
-
5 1 3 4 6 12
-
样例输出:
-
1 2 3 4 6
-
来源:
- 2011年清华大学计算机研究生机试真题
-
#include <stdio.h> #include <math.h> int main(){ int n,num[1001]; while(scanf("%d",&n)!=EOF&&n!=0){ //输入n for(int i=0;i<n;i++){ scanf("%d",&num[i]);//输入n个整数 int sq=sqrt(num[i]),cnt=0;//测试到不比sqrt(num[i])(对num[i]开根号)大的整数即可 for(int j=1;j<=sq;j++){ if(num[i]%j==0) cnt += 2;//约数个数加2 } if(sq*sq==num[i]) --cnt;//如果对num[i]开根号结果为整数,则约数总数要减1 printf("%d\n",cnt);//输出结果 } } return 0; } /************************************************************** Problem: 1087 User: zpy Language: C++ Result: Accepted Time:100 ms Memory:1032 kb ****************************************************************/