Poj 2603 约数个数和
水题,求约数个数和,
p1p2…pr为素数,
约数个数σ(n)=(1+e1)(1+e2)…(1+er)
约数和τ(n)=(1+p1++…+)(1+p2++…+)…(1+pr++…+)
σ(n),τ(n)都为乘性函数
注意结果要取个位数,WA一次
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
const int MAX=10000;
int prime[MAX+10];
bool isprime[MAX+10];
int hashprime[MAX+10];
void getprime()
{
int i,j,cnt=0;
memset(isprime,1,sizeof(isprime));
isprime[0]=isprime[1]=0;
for(i=2;i<=MAX;i++)
{
if(isprime[i])
{
prime[++cnt]=i;
for(j=i*i;j<=MAX;j+=i)
isprime[j]=0;
}
}
prime[0]=cnt;
}
void gethashprime(int n)
{
int i;
for(i=1;prime[i]*prime[i]<=n;i++)
{
if(n%prime[i]==0)
{
while(n%prime[i]==0)
{
hashprime[prime[i]]++;
n/=prime[i];
}
}
}
if(n>1)
hashprime[n]++;
}
int main()
{
int n,i;
int sum=1;
getprime();
freopen("in.txt","r",stdin);
for(i=1;i<=10;i++)
{
scanf("%d",&n);
gethashprime(n);
}
for(i=1;i<=MAX;i++)
if(hashprime[i])
sum=sum*(1+hashprime[i])%10;
printf("%d\n",sum);
return 0;
}