约数个数定理:
方法:
一个数分解为两个质数乘积是唯一的
int isPrime(int n) // 判断n是否为质数
{
for (int i = 2; i * i <= n; i++)
{
if (n % i == 0) return 0;
}
return 1;
}
void work3()
{
int p[100],a[100],cnt=0;
int i,j,t;
for (i = 2; i <= 100; i++) // 将100以内的质数保存起来
{
if (isPrime(i))
{
p[cnt]=i;
a[cnt]=0; // 初始时含质因子p[i]的因子个数 a[i]=0
cnt++;
}
}
for (i = 2; i <= 100; i++) // 将1~100中每个数的质因子分解的因子数累加起来
{
j = 0;
t=i;
while (j<cnt && p[j] <= t)
{
while (t % p[j] == 0)
{
t /= p[j];
a[j]++;
}
j++;
}
}
long long ans = 1;
for (i = 0; i < cnt; i++)
{
ans *= (a[i] + 1);
}
printf("%lld\n", ans);
}