uva10820 - Send a Table 欧拉函数
2013-11-23 10:28
471 查看
ProblemA
SendaTable
Input:StandardInput
Output:StandardOutput
Whenparticipatinginprogrammingcontests,yousometimesfacethefollowingproblem:Youknowhowtocalcutaletheoutputforthegiveninputvalues,butyouralgorithmiswaytooslowtoeverpassthetimelimit.Howeverhardyoutry,youjustcan'tdiscoverthe
properbreak-offconditionsthatwouldbringdownthenumberofiterationstowithinacceptablelimits.
Nowiftherangeofinputvaluesisnottoobig,thereisawayoutofthis.LetyourPCrattleforhalfanourandproduceatableofanswersforallpossibleinputvalues,encodethistableintoaprogram,submitittothejudge,etvoila:Acceptedin0.000
seconds!(Somewouldarguethatthisischeating,butremember:Inloveandprogrammingcontestseverythingispermitted).
Facedwiththisproblemduringoneprogrammingcontest,Jimmydecidedtoapplysucha'technique'.Buthoweverhardhetried,hewasn'tabletosqueezeallhispre-calculatedvaluesintoaprogramsmallenoughtopassthejudge.Thesituationlookedhopeless,
untilhediscoveredthefollowingpropertyregardingtheanswers:theanswerswherecalculatedfromtwointegers,butwheneverthetwoinputvalueshadacommonfactor,theanswercouldbeeasilyderivedfromtheanswerforwhichtheinputvaluesweredividedby
thatfactor.Toputitinotherwords:
SayJimmyhadtocalculateafunctionAnswer(x,y)wherexandyarebothintegersintherange[1,N].WhenheknowsAnswer(x,y),hecaneasilyderiveAnswer(k*x,k*y),wherekisanyintegerfromitbyapplyingsomesimplecalculationsinvolvingAnswer(x,
y)andk.ForexampleifN=4,heonlyneedstoknowtheanswersfor11outofthe16possibleinputvaluecombinations:Answer(1,1),Answer(1,2),Answer(2,1),Answer(1,3),Answer(2,3),Answer(3,2),Answer(3,1),Answer(1,4),Answer(3,4),Answer(4,3)
andAnswer(4,1).Theother5canbederivedfromthem(Answer(2,2),Answer(3,3)andAnswer(4,4)fromAnswer(1,1),Answer(2,4)fromAnswer(1,2),andAnswer(4,2)fromAnswer(2,1)).NotethatthefunctionAnswerisnotsymmetric,soAnswer(3,2)cannot
bederivedfromAnswer(2,3).
Nowwhatwewantyoutodois:foranyvaluesofNfrom1uptoandincluding50000,givethenumberoffunctionJimmyhastopre-calculate.
Input
φ函数的值 通式:φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn),其中p1,p2……pn为x的所有质因数,x是不为0的整数。φ(1)=1(唯一和1互质的数(小于等于1)就是1本身)。(注意:每种质因数只一个。比如12=2*2*3。
若n是质数p的k次幂,φ(n)=p^k-p^(k-1)=(p-1)p^(k-1),因为除了p的倍数外,其他数都跟n互质。
设n为正整数,以φ(n)表示不超过n且与n互
素的正整数的个数,称为n的欧拉函数值,这里函数
φ:N→N,n→φ(n)称为欧拉函数。
若m,n互质,φ(mn)=φ(m)φ(n)。
特殊性质:当n为奇数时,φ(2n)=φ(n)。
以上这一段来自百度百科。
打出欧拉公式的表也就比快速打素数表多出一步,找到素数p后把这个素数的倍数x都标记(如果x没有访问过,就先把phi[x]赋值为x),由于x有素因子p,所以要乘以(1-1/p),也就是除以p再乘(p-1)(注意最好是先除再乘,防止越界)。最后把小于等于要求值的素数都找一遍后,每个φ(x)就都求出来了。
这道题求的是小于等于N的互素对数,所以打完表后要递推一下,phi[i]=phi[i-1]+phi[i],再就是一组两个数交换位置也算,所以答案要乘以2,(1,1)是特例,要再减去1。
SendaTable
Input:StandardInput
Output:StandardOutput
Whenparticipatinginprogrammingcontests,yousometimesfacethefollowingproblem:Youknowhowtocalcutaletheoutputforthegiveninputvalues,butyouralgorithmiswaytooslowtoeverpassthetimelimit.Howeverhardyoutry,youjustcan'tdiscoverthe
properbreak-offconditionsthatwouldbringdownthenumberofiterationstowithinacceptablelimits.
Nowiftherangeofinputvaluesisnottoobig,thereisawayoutofthis.LetyourPCrattleforhalfanourandproduceatableofanswersforallpossibleinputvalues,encodethistableintoaprogram,submitittothejudge,etvoila:Acceptedin0.000
seconds!(Somewouldarguethatthisischeating,butremember:Inloveandprogrammingcontestseverythingispermitted).
Facedwiththisproblemduringoneprogrammingcontest,Jimmydecidedtoapplysucha'technique'.Buthoweverhardhetried,hewasn'tabletosqueezeallhispre-calculatedvaluesintoaprogramsmallenoughtopassthejudge.Thesituationlookedhopeless,
untilhediscoveredthefollowingpropertyregardingtheanswers:theanswerswherecalculatedfromtwointegers,butwheneverthetwoinputvalueshadacommonfactor,theanswercouldbeeasilyderivedfromtheanswerforwhichtheinputvaluesweredividedby
thatfactor.Toputitinotherwords:
SayJimmyhadtocalculateafunctionAnswer(x,y)wherexandyarebothintegersintherange[1,N].WhenheknowsAnswer(x,y),hecaneasilyderiveAnswer(k*x,k*y),wherekisanyintegerfromitbyapplyingsomesimplecalculationsinvolvingAnswer(x,
y)andk.ForexampleifN=4,heonlyneedstoknowtheanswersfor11outofthe16possibleinputvaluecombinations:Answer(1,1),Answer(1,2),Answer(2,1),Answer(1,3),Answer(2,3),Answer(3,2),Answer(3,1),Answer(1,4),Answer(3,4),Answer(4,3)
andAnswer(4,1).Theother5canbederivedfromthem(Answer(2,2),Answer(3,3)andAnswer(4,4)fromAnswer(1,1),Answer(2,4)fromAnswer(1,2),andAnswer(4,2)fromAnswer(2,1)).NotethatthefunctionAnswerisnotsymmetric,soAnswer(3,2)cannot
bederivedfromAnswer(2,3).
Nowwhatwewantyoutodois:foranyvaluesofNfrom1uptoandincluding50000,givethenumberoffunctionJimmyhastopre-calculate.
Input
Theinputfilecontainsatmost600linesofinputs.Eachlinecontainsanintegerlessthan50001whichindicatesthevalueofN.Inputisterminatedbyalinewhichcontainsazero.Thislineshouldnotbeprocessed.
Output
Foreachlineofinputproduceonelineofoutput.ThislinecontainsanintegerwhichindicateshowmanyvaluesJimmyhastopre-calculateforacertainvalueofN.SampleInputOutputforSampleInput
2 5 0 | 3 19 |
若n是质数p的k次幂,φ(n)=p^k-p^(k-1)=(p-1)p^(k-1),因为除了p的倍数外,其他数都跟n互质。
设n为正整数,以φ(n)表示不超过n且与n互
素的正整数的个数,称为n的欧拉函数值,这里函数
φ:N→N,n→φ(n)称为欧拉函数。
若m,n互质,φ(mn)=φ(m)φ(n)。
特殊性质:当n为奇数时,φ(2n)=φ(n)。
以上这一段来自百度百科。
打出欧拉公式的表也就比快速打素数表多出一步,找到素数p后把这个素数的倍数x都标记(如果x没有访问过,就先把phi[x]赋值为x),由于x有素因子p,所以要乘以(1-1/p),也就是除以p再乘(p-1)(注意最好是先除再乘,防止越界)。最后把小于等于要求值的素数都找一遍后,每个φ(x)就都求出来了。
这道题求的是小于等于N的互素对数,所以打完表后要递推一下,phi[i]=phi[i-1]+phi[i],再就是一组两个数交换位置也算,所以答案要乘以2,(1,1)是特例,要再减去1。
#include<cstring>
#include<cstdio>
#include<iostream>
#include<climits>
#include<cmath>
#include<algorithm>
#include<queue>
#defineINF0x3f3f3f3f
usingnamespacestd;
intN,phi[50010],M=50010;
voidphi_table(){
memset(phi,0,sizeof(phi));
inti,j;
phi[1]=1;
for(i=2;i<=M;i++)if(!phi[i]){
for(j=i;j<=M;j+=i){
if(!phi[j])phi[j]=j;
phi[j]=phi[j]/i*(i-1);
}
}
}
intmain(){
//freopen("in.txt","r",stdin);
phi_table();
inti;
for(i=2;i<=M;i++)phi[i]=phi[i]+phi[i-1];
while(scanf("%d",&N),N){
printf("%d\n",phi
*2-1);
}
return0;
}
相关文章推荐
- UVa 10820 - Send a Table(欧拉函数)
- UVA 10820 - Send a Table 数论 (欧拉函数)
- UVA 10820 Send a Table [欧拉函数] [线性筛法]
- UVa 10820 - Send a Table 欧拉函数模板
- UVA 10820 - Send a Table 数论 (欧拉函数)
- UVa 10820 - Send a Table 欧拉函数模板
- Send a Table - UVa 10820 欧拉函数
- uva-10820-Send a Table 欧拉函数,筛法求欧拉函数
- UVA 10820 Send a Table——欧拉函数
- UVA 10820 Send a Table(欧拉函数)
- UVA - 10820 Send a Table(欧拉函数)
- uva 10820 - Send a Table(欧拉函数)
- UVA 10820——Send a Table(欧拉函数)
- UVa 10820 (打表、欧拉函数) Send a Table
- UVA10820 - Send a Table(欧拉函数)
- UVa 10820 - Send a Table (求1-n中所有数的欧拉函数值)
- Send a Table 欧拉函数UVA - 10820
- UVa-10820 Send a Table 欧拉函数
- Send a Table 欧拉函数UVA - 10820
- uva 10820 Send a Table 欧拉函数