输入n个整数,依次输出每个数的约数的个数
输入:输入的第一行为N,即数组的个数(N<=1000)接下来的1行包括N个整数,其中每个数的范围为(1<=Num<=1000000000)当N=0时输入结束。
输出:可能有多组输入数据,对于每组输入数据,输出N行,其中每一行对应上面的一个数的约数的个数。
样例输入: 5 1 3 4 6 12 样例输出: 1 2 3 4 6 #include<stdio.h> int Count(int x){ int i,cnt=0; for(i=1;i*i<x;i++){ if(x%i==0) cnt+=2; } if(i*i==x) cnt++; return cnt; } int main(){ int num,i,A[1001]; while(~scanf("%d",&num)){ if(num==0) break; for(i=0;i<num;i++) scanf("%d",&A[i]); for(i=0;i<num;i++) printf("%d\n",Count(A[i])); } return 0; } /* 5 1 3 4 6 12 样输出: 1 2 3 4 6*/ #include<stdio.h> int Count(int x){ int i,cnt=0; for(i=1;i*i<=x;i++){ if(x%i==0) cnt+=2; } i--; if(i*i==x) cnt--; return cnt; } int main(){ int num,i,A[1001]; while(~scanf("%d",&num)){ if(num==0) break; for(i=0;i<num;i++) scanf("%d",&A[i]); for(i=0;i<num;i++) printf("%d\n",Count(A[i])); } return 0; } /* 5 1 3 4 6 12 样输出: 1 2 3 4 6*/ #include<stdio.h> int Count(int x){ int i,cnt=0; for(i=1;i*i<=x;i++){ if(x%i==0) cnt+=2; } if((i-1)*(i-1)==x) cnt--; return cnt; } int main(){ int num,i,A[1001]; while(~scanf("%d",&num)){ if(num==0) break; for(i=0;i<num;i++) scanf("%d",&A[i]); for(i=0;i<num;i++) printf("%d\n",Count(A[i])); } return 0; } /* 5 1 3 4 6 12 样输出: 1 2 3 4 6*/准确来说:由于sqrt是double类型的,所以会丢失精度,应该用int强制类型转换
最关键是理解:if(x%i==0) (i,x/i)那么x/i<i 他跟(x/i,i)重复
(1,60),(2,30),(4,15),(5,12),(6,10),i<sqrt(x)的时候,继续
if i>sqrt(x) 那么x/i>i
