这个题主要就是一个数学知识点:
10 = 2^1 * 5 ^1 所以10的约数的个数就是 (1+1) * (1+1) 2的指数加一乘以5的指数加一
20 = 2^2 * 5 ^1 所以 20的约数的个数是(2+1) * (1 + 1)
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
const int n = 10;
const int MaxNi = 10000;
int a[n];
int yueshu[n][MaxNi];//记录每个数的约数
int all_yueshu[MaxNi];
int init()
{
for(int i=0;i<n;i++)
{
for(int j=0;j<MaxNi;j++)
{
yueshu[i][j] = 0;
all_yueshu[j] = 0;
}
}
}
int main()
{
//freopen("POJ-1166敌兵布阵.txt","r",stdin);
void computer_yueshu(int ,int );
freopen("1.txt","r",stdin);
int max_ni=0;
for(int i=0;i<n;i++)
{
cin>>a[i];
max_ni = max(max_ni,a[i]);
}
init();
for(int i=0;i<n;i++)
{
computer_yueshu(i,2);
}
for(int i=0;i<n;i++)
{
for(int j=2;j<=max_ni;j++)
{
if(yueshu[i][j]>0)
{
all_yueshu[j]+=yueshu[i][j];
}
}
}
//cout<<"ok"<<endl;
long long int result = 1;
for(int j=2;j<=max_ni;j++)
{
if(all_yueshu[j]!=0)
{
// cout<<"约数 = "<<j<<" 次数 = "<<all_yueshu[j]<<endl;
result *= (all_yueshu[j]+1);
}
}
// cout<<"ok"<<endl;
cout<<result%10<<endl;
}
//计算第i个数的约数
void computer_yueshu(int i,int chushu)
{
bool isprime(int );
int x = a[i];
// cout<<"1 "<<x<<endl;
if(isprime(x))
{
// cout<<"prime"<<endl;
yueshu[i][x]++;
return ;
}
else{
if(x<chushu)
{
return ;
}
if(x%chushu==0)
{
yueshu[i][chushu]++;
a[i] /= chushu;
// cout<<a[i]<<endl;
computer_yueshu(i,chushu);
}
else{
chushu++;
computer_yueshu(i,chushu);
}
}
}
bool isprime(int x)
{
for(int i=2;i<=sqrt(x);i++)
{
if(x%i==0)
return false;
}
return true;
}