uva10820 - Send a Table 欧拉函数
来源:互联网 发布:dmsp ols灯光数据 编辑:程序博客网 时间:2024/06/17 04:56
Problem A
Send a Table
Input: Standard Input
Output: Standard Output
When participating inprogramming contests, you sometimes face the following problem: You know how tocalcutale the output for the given input values, but your algorithm is way tooslow to ever pass the time limit. However hard you try, you just can't discoverthe proper break-off conditions that would bring down the number of iterationsto within acceptable limits.
Now if the range of input values is not too big,there is a way out of this. Let your PC rattle for half an our and produce atable of answers for all possible input values, encode this table into aprogram, submit it to the judge, et voila: Accepted in 0.000 seconds! (Somewould argue that this is cheating, but remember: In love and programmingcontests everything is permitted).
Faced with this problem during one programmingcontest, Jimmy decided to apply such a 'technique'. But however hard he tried,he wasn't able to squeeze all his pre-calculated values into a program smallenough to pass the judge. The situation looked hopeless, until he discoveredthe following property regarding the answers: the answers where calculated fromtwo integers, but whenever the two input values had a common factor, the answercould be easily derived from the answer for which the input values were dividedby that factor. To put it in other words:
Say Jimmy had to calculate a function Answer(x,y) where x and y are both integers in the range [1, N]. When he knows Answer(x, y), he can easilyderive Answer(k*x, k*y), where k is any integer from it by applying some simplecalculations involving Answer(x, y) and k. For example if N=4, he only needs toknow the answers for 11 out of the 16 possible input value combinations: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) and Answer(4, 1).The other 5 can be derived from them (Answer(2, 2), Answer(3, 3) and Answer(4,4) from Answer(1, 1), Answer(2, 4) from Answer(1, 2), and Answer(4, 2) fromAnswer(2, 1)). Note that the function Answer is not symmetric, so Answer(3, 2)can not be derived from Answer(2, 3).
Now what we want you to do is: for any values ofN from 1 upto and including 50000, give the number of function Jimmy has topre-calculate.
Input
The input file contains at most 600 lines ofinputs. Each line contains an integer less than 50001 which indicates the valueof N. Input is terminated by a line which contains a zero. This line should notbe processed.
Output
For eachline of input produce one line of output. This line contains an integer which indicates how many values Jimmy has topre-calculate for a certain value of N.
SampleInput Output for Sample Input
2
5
0
3
19
以上这一段来自百度百科。
打出欧拉公式的表也就比快速打素数表多出一步,找到素数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>#define INF 0x3f3f3f3fusing namespace std;int N,phi[50010],M=50010;void phi_table(){ memset(phi,0,sizeof(phi)); int i,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); } }}int main(){ //freopen("in.txt","r",stdin); phi_table(); int i; for(i=2;i<=M;i++) phi[i]=phi[i]+phi[i-1]; while(scanf("%d",&N),N){ printf("%d\n",phi[N]*2-1); } return 0;}
- uva10820 - Send a Table 欧拉函数
- UVA10820 - Send a Table(欧拉函数)
- 【数论】Send a Table, UVa10820 【线性筛法】【欧拉函数】
- UVa10820 - Send a Table
- Send a Table uva10820
- uva10820 Send a Table
- Send a Table 欧拉函数UVA
- uva10820(欧拉函数)
- uva10820 - Send a Table(交表)
- UVA10820:Send a Table(交表)
- uva-10820-Send a Table 欧拉函数,筛法求欧拉函数
- UVA 10820 - Send a Table 数论 (欧拉函数)
- uva 10820 - Send a Table(欧拉函数)
- 10820 Send a Table(欧拉函数)
- UVa 10820 Send a Table(欧拉函数)
- UVa 10820 - Send a Table 欧拉函数模板
- UVA - 10820 Send a Table 欧拉函数
- uvaoj 10820 Send a Table 欧拉函数打表
- @SuppressWarnings
- linux下使用U盘
- Latex 公式排版
- LTE - EPS Architecture
- oracle11g em 登录失败 “您的用户名和/或口令无效”
- uva10820 - Send a Table 欧拉函数
- MTM动画教程学习笔记1【第三章 动画中的三角学】
- 小米、360、盛大路由器?居然还有这么多人趋之若鹜!!!想不通!
- MapReduce数据流
- 时间子系统6_高分辨率定时器框架初始化
- thinkphp对数据库操作有哪些内置函数
- Linux 信号signal处理机制
- typedef 函数指针
- linux c++ 多线程 互斥访问