题目地址:http://ac.jobdu.com/problem.php?cid=1040&pid=55
C语言源码:
#include<stdio.h>
#define maxsize 32000
int a[maxsize],s[maxsize],top;
void pri()
{
int i,j;
top=0;
for(i=2;i<maxsize;i++)
a[i]=0;
for(i=2;i<maxsize;i++)
{
if(a[i]==0)
{
s[top++]=i;
for(j=i;i*j<maxsize;j++)
a[i*j]=1;
}
}
}
int main()
{
int n,i,j,num[1010],x,k;
pri();
scanf("%d",&n);
while(n)
{
for(i=0;i<n;i++)
scanf("%d",&num[i]);
for(i=0;i<n;i++)
{
x=1;
for(j=0;j<top;j++)
{
k=1;
while(num[i]%s[j]==0)
{
k++;
num[i]=num[i]/s[j];
}
x*=k;
if(num[i]==1)
break;
}
if(num[i]!=1)
x*=2;
printf("%d\n",x);
}
scanf("%d",&n);
}
}