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;

}

原文地址:https://www.cnblogs.com/inpeace7/p/2392163.html