#include <iostream>
#include <string>
#include <algorithm>
#include <cmath>
using namespace std;
const int MAX_LEN = 100000;
struct factor {
int x, count;
}factors[10];
int primes[MAX_LEN];
int pN=0;
bool is_prime(int a){
if(a==1) return false;
int m = sqrt(a);
for(int i =2;i<=m;i++){
if(a%i == 0) return false;
}
return true;
}
void find_primes(){
for(int i =2;i<MAX_LEN;++i){
if(is_prime(i)) primes[pN++] = i;
}
}
int sovle(int a){
int ans=1;
int m = sqrt(a);
int times =0;
for(int i = 0;i< pN &&primes[i] <= m; ++i){
if (a%primes[i] == 0){
factors[times].x = primes[i];
factors[times].count =0;
while (a%primes[i] == 0){
factors[times].count++;
a/=primes[i];
}
times++;
}
if(a == 1) break;
}
if (a>1){
factors[times].x = a;
factors[times++].count=1;
}
for (int j = 0; j<times;j++) {
ans*=(factors[j].count+1);
}
return ans;
}
int main() {
find_primes();
int N;
while ( scanf("%d",&N) && N!=0) {
for (int j =0; j<N; j++) {
int n;
scanf("%d",&n);
int ans = sovle(n);
printf("%d\n",ans);
}
}
return 0;
}
问题 D: 约数的个数
最新推荐文章于 2024-10-15 19:28:18 发布