http://acm.pku.edu.cn/JudgeOnline/problem?id=2480 这道题改了两天,里面用到了整数因子分解,筛选素数,求欧拉函数,
以下是和partychen的聊天记录,既然他把那么难敲得证明都
敲出来了,那我就只接捻好了HOHO~~
主要公式:
sima(N/pi)*pi另外这个公式是可积的陈俊奎 10:13:35
m的约数为x1,x2,x3...xp
陈俊奎 10:13:48
n的约数为y1,y2,y3....yp
陈俊奎 10:14:05
那么有gcd(xi,yi)=1
陈俊奎 10:15:14
那么m*n的任意约数T,有唯一分解T=xi*yj
陈俊奎 10:16:47
T*E(m*n/T)=xi*yi*E(m/xi* n/ yj)=xi*E(m/xi)*yj*E(n / yj)
陈俊奎 10:18:09
f(m*n)=sima(xi*E(m/xi)*yj*E(n / yj))=(sima(xi*E(m/xi))*(sima(yj*E(n/ yj)))=f(m)*f(n)
陈俊奎 10:19:31
f(12)=f(2^2)*f(3)
陈俊奎 10:20:00
f(3)=1*E(3)+3*E(1)=2+3=5
陈俊奎 10:21:14
f(2^2)=1*E(2^2)+2*E(2)+4*E(1)=(2-1)*2^(2-1)+2*(2-1)+4*1
陈俊奎 10:21:25
=2+2+4=8
1
#include<iostream>
2
using namespace std;
3
#define Max_N 50000
4
#define Max_P 5200
5
#define __int64 _int64
6
int Prime[Max_N];//对素数的标记
7
int P_div[Max_P];//存储素数约数
8
int P_mi[Max_P];//存储素数约数的幂
9
void init()//筛选素数
10
{
11
_int64 i,j;
12
for(i=2;i<Max_N;i++)
13
if(!Prime[i])
14
for(j=2;j*i<Max_N;j++)Prime[j*i]=1;
15
}
16
_int64 phi(int p,int e)//欧拉
17
{
18
if(e==0||p==1)return 1;
19
if(e==1)return p-1;
20
_int64 i;
21
_int64 result=1;
22
for(i=1;i<e;i++)
23
result*=p;
24
result*=(p-1);
25
return result;
26
}
27
int get(int i,int e)
28
{
29
int j;
30
int r=1;
31
for(j=e;j<P_mi[i];j++)
32
r*=P_div[i];
33
return r;
34
}
35
int factorization(int n)//整数因子分解
36
{
37
int i,j=0;
38
for(i=2;i<Max_N&&n>1;i++)
39
if(!Prime[i]&&n%i==0){
40
P_div[j]=i;
41
while(n%i==0){
42
++P_mi[j];
43
n/=i;}
44
j++;}
45
if(i>=Max_N||!j){//好重要的疏漏!!!大素数因子没有存入P_div中
46
P_div[j]=n;//吸取教训的地方!!
47
P_mi[j++]=1;}
48
return j;
49
}
50
int main()
51
{
52
//freopen("1.in","r",stdin);
53
//freopen("1.ans","w",stdout);
54
int N;
55
int i,j,t,h,tmp1;
56
_int64 tmp2;
57
_int64 result,p;
58
memset(Prime,0,sizeof(Prime));
59
init();
60
while(scanf("%d",&N)!=EOF){//
61
result=1;
62
memset(P_div,0,sizeof(P_div));
63
memset(P_mi,0,sizeof(P_mi));
64
t=factorization(N);
65
for(i=0;i<t;i++){
66
for(p=0,j=0,h=1;j<=P_mi[i];j++){
67
tmp1=get(i,j);
68
tmp2=phi(P_div[i],j);
69
p+=tmp2*tmp1;}
70
result*=p;}
71
printf("%I64d\n",result);
72
}
73
return 0;
74
}
posted on 2008-03-01 20:19
zoyi 阅读(372)
评论(0) 编辑 收藏 引用 所属分类:
acm