欧拉函数 cojs 2181. 打表
2016-06-02 14:57
218 查看
cojs 2181. 打表
★☆ 输入文件:sendtable.in输出文件:
sendtable.out简单对比
时间限制:1 s 内存限制:256 MB
【题目描述】
有一道比赛题目,输入两个整数x,y(1≤x,y≤n),输出某个函数f(x,y)。有位选手想打表(即事先计算出所有的f(x,y),写在源代码里),但是表太大了,原代码超过了比赛的限制,需要精简。好在那道题目有一个性质,使得很容易根据f(x,y)算出f(x*k,y*k)(其中k是正整数),这样有一些f(x,y)就不需要存在表里了。
输入n(n≤50000),你的任务是统计最简的表里有多少个元素。例如,n=2时有3个(1,1),(1,2),(2,1)。
【输入格式】
输入只有一行,一个整数n;【输出格式】
输出也仅有一行,即表里元素的个数。【样例输入】
2
【样例输出】
3
/*题目的要求可以这样理解,假设x<y求出小于y的所有与y互质的数的个数,这就是欧拉函数的定义了,然后因为x,y可以互换,所以最终的结果就是 小于等于n,大于等于2的所有的数的欧拉函数*2+1(+1是因为有(1,1)这个情况) */ #define N 50011 #include<iostream> using namespace std; #include<cstdio> int phi[N+10]={0}; int n; void get_phi()/*定义法求欧拉函数*/ { phi[1]=1; for(int i=2;i<=N;++i) { if(!phi[i]) { for(int j=i;j<=N;j+=i) { if(!phi[j]) phi[j]=j; phi[j]=phi[j]/i*(i-1);/*注意这里一定要先除后乘,因为它的定义中就是这样先进行除法,再进行减法*/ } } } } int main() { freopen("sendtable.in","r",stdin); freopen("sendtable.out","w",stdout); get_phi(); scanf("%d",&n); long long ans=0; for(int i=2;i<=n;++i) ans+=phi[i]; cout<<(ans*2+1)<<endl; fclose(stdin);fclose(stdout); return 0; }
相关文章推荐
- JS篇——javascript中的this
- js获取URL地址栏中的参数
- json转类
- jsonp
- jsp简单实现统计在线人数
- JS跨域获取cookies
- js 清除最后一位 例如逗号
- 使用canvg截屏上传至服务器并返回二维码
- jfinal中JsonResult常用
- 页面分页
- js 常用库工具类等
- js 阿拉伯数字转转汉字
- JavaScript中的Array 对象(数组对象)
- jsp 页面获取xml的内容
- Ajax验证登录后跳转到主页面
- 【JavaScript】常用方法
- 关于模板页调用js的问题
- constructor与prototype
- JavaScript 标准对象
- js 给文本框input赋值(值为…