题目描述
输入n个整数,依次输出每个数的约数的个数
输入描述:
输入的第一行为N,即数组的个数(N<=1000)
接下来的1行包括N个整数,其中每个数的范围为(1<=Num<=1000000000)
当N=0时输入结束。
输出描述:
可能有多组输入数据,对于每组输入数据,
输出N行,其中每一行对应上面的一个数的约数的个数。
示例1
输入
5
1 3 4 6 12
输出
1
2
3
4
6
分析:第一次提交代码,超时了。。。。
#include <stdio.h>
#include <math.h>
int main(){int n;int a[1000],sum[1000];while(scanf("%d",&n)!=EOF){for (int i = 0; i <n ; i++) {scanf("%d",&a[i]);sum[i]=0;}for(int i=0;i<n;i++){for(int j=1;j<=a[i];j++){if(a[i]%j==0){sum[i]++;}}}for (int i = 0; i <n ; i++) {printf("%d\n",sum[i]);}}return 0;
}
因为没考虑到数据量数据大小对问题的影响,采用了较简单的思路
所以后续做了以下更改,方得以正确运行
#include <stdio.h>
int main(){int n;int a[1000],sum[1000];while(scanf("%d",&n)!=EOF){for(int i=0;i<n;i++){scanf("%d",&a[i]);sum[i]=0;int j;for(j=1;j*j<a[i];j++){if(a[i]%j==0){sum[i]+=2;}}if(j*j==a[i]){sum[i]++;}}for(int i=0;i<n;i++){printf("%d\n",sum[i]);}}return 0;
}
判断一个数num的约数个数,以i*i小于num为循环结束条件,则可以节约一半的时间