欧拉函数:

对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目。

对于一个正整数N的素数幂分解N=P1^q1*P2^q2*...*Pn^qn.

Euler函数表达通式:euler(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…(1-1/pn),或者φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn),

其中p1,p2……pn为x的所有素因数,x是不为0的整数。

euler(1)=1(唯一和1互质的数就是1本身)。 
欧拉公式的延伸:

1.小于或等于n的数中,与n互质的数的总和为:φ(n) * n / 2  (n>1)。

2.n=∑d|nφ(d),即n的因数(包括1和它自己)的欧拉函数之和等于n。

代码:

ll euler(ll n){                                   
    ll ans=n;
    for(int i=;i*i<=n;i++){                     //这里i*i只是为了减少运算次数,直接i<=n也没错,
        if(n%i==){                              //因为只有素因子才会加入公式运算。仔细想一下可以明白i*i的用意。
            ans=ans/i*(i-);
            while(n%i==)
                n/=i;                            //去掉倍数
        }
    }
    if(n>)
        ans=ans/n*(n-);
    return ans;
}

举个例子:10

10的质因子为1,2,5;10的欧拉函数是1,3,7,9;i=2;2*2<10;10%2==0;ans=10/2*(2-1)=5;n=10/2=5;

i=3;3*3<10;10%3!=0跳出循环,执行下面的。此时n=5>1;ans=5/5*(5-1)=4;

欧拉函数就是通过质因子找到少于或等于n的数中与n互质的数的数目。具体公式怎么得出来的我也不会,要找本数论好好看看了。

自己再好好想想。看了两三天了,终于知道什么是欧拉函数了

POJ2407

                                                                                 Relatives
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 14285   Accepted: 7133

Description

Given n, a positive integer, how many positive integers less than n are relatively prime to n? Two integers a and b are relatively prime if there are no integers x > 1, y > 0, z > 0 such that a = xy and b = xz.

Input

There are several test cases. For each test case, standard input contains a line with n <= 1,000,000,000. A line containing 0 follows the last case.

Output

For each test case there should be single line of output answering the question posed above.

Sample Input

7
12
0

Sample Output

6
4 代码:
#include<cstdio>
#include<iostream>
using namespace std;
typedef long long ll;
ll euler(ll n){
ll ans=n;
for(int i=;i*i<=n;i++){
if(n%i==){
ans=ans/i*(i-);
while(n%i==)
n/=i;
}
}
if(n>)
ans=ans/n*(n-);
return ans;
}
int main(){
ll n;
while(~scanf("%lld",&n)){
if(n==)break;
euler(n);
printf("%lld\n",euler(n));
}
return ;
}

提交n次都是错,原因在于提交的时候没有看清类型,G++才对,GCC交了5次。。。
智障。。。

POJ 2407.Relatives-欧拉函数O(sqrt(n))的更多相关文章

  1. POJ 2407 Relatives(欧拉函数)

    题目链接 题意 : 求小于等于n中与n互质的数的个数. 思路 : 看数学的时候有一部分是将欧拉函数的,虽然我没怎么看懂,但是模板我记得了,所以直接套了一下模板. 这里是欧拉函数的简介. #includ ...

  2. POJ 2407 Relatives 欧拉函数题解

    版权声明:本文作者靖心,靖空间地址:http://blog.csdn.net/kenden23/,未经本作者同意不得转载. https://blog.csdn.net/kenden23/article ...

  3. 欧拉函数O(sqrt(n))与欧拉线性筛素数O(n)总结

    欧拉函数: 对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目. POJ 2407.Relatives-欧拉函数 代码O(sqrt(n)): ll euler(ll n){ ll ans=n; ...

  4. POJ 2480 (约数+欧拉函数)

    题目链接: http://poj.org/problem?id=2480 题目大意:求Σgcd(i,n). 解题思路: 如果i与n互质,gcd(i,n)=1,且总和=欧拉函数phi(n). 如果i与n ...

  5. POJ2407–Relatives(欧拉函数)

    题目大意 给定一个正整数n,要求你求出所有小于n的正整数当中与n互质的数的个数 题解 欧拉函数模板题~~~因为n过大~~~所以直接用公式求 代码: #include<iostream> # ...

  6. Poj 2478-Farey Sequence 欧拉函数,素数,线性筛

    Farey Sequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14291   Accepted: 5647 D ...

  7. poj 2480 (欧拉函数应用)

    点击打开链接 //求SUM(gcd(i,n), 1<=i<=n) /* g(n)=gcd(i,n),根据积性定义g(mn)=g(m)*g(n)(gcd(m,n)==1) 所以gcd(i,n ...

  8. poj2407 Relatives 欧拉函数基本应用

    题意很简单 就是欧拉函数的定义: 欧拉函数是指:对于一个正整数n,小于n且和n互质的正整数(包括1)的个数,记作φ(n) .题目求的就是φ(n) 根据 通式:φ(x)=x*(1-1/p1)*(1-1/ ...

  9. poj 2773 利用欧拉函数求互质数

    题意:找到与n互质的第 k个数 开始一看n是1e6 敲了个暴力结果tle了,后来发现k达到了 1e8 所以需要用到欧拉函数. 我们设小于n的 ,与n互质的数为  (a1,a2,a3.......a(p ...

  10. poj 2154 Color 欧拉函数优化的ploya计数

    枚举位移肯定超时,对于一个位移i.我们须要的是它的循环个数,也就是gcd(i,n),gcd(i,n)个数肯定不会非常多,由于等价于n的约数的个数. 所以我们枚举n的约数.对于一个约数k,也就是循环个数 ...

随机推荐

  1. iBatis的基本使用

    项目结构: 依赖jar: 数据库依赖: CREATE TABLE `person` ( `id` ) NOT NULL AUTO_INCREMENT, `name` ) NOT NULL, PRIMA ...

  2. 51nod 1819 黑白树V2(树链剖分)

    第一次写如此复杂的树链剖分, 感觉自己代码能力还是挺不错的,没有调试太久(2个小时) 最后代码量高达11K orz(大部分都是重复的线段树代码,以后可以考虑优化一下代码量) 题解: 首先就是要进行一次 ...

  3. C# 获取ORACLE SYS.XMLTYPE "遇到不支持的 Oracle 数据类型 USERDEFINED"

    1.需要加函数 2.需要加表别名 select   a.XML.getclobval()  from TB1  a

  4. 安徽师大附中%你赛day4T1 金字塔 解题报告

    金字塔 题目背景: \(Zdrcl\)带着妹子们来到了胡夫金字塔周边旅游, 发现这里正在进行一个有关金字塔的游戏 题目描述: 游戏规则如下: 1. 这里的金字塔是一个 \(N\) 阶的二维金字塔. 2 ...

  5. 【BZOJ 4034】[HAOI2015]树上操作 差分+dfs序+树状数组

    我们只要看出来这道题 数组表示的含义就是 某个点到根节点路径权值和就行 那么我们可以把最终答案 看做 k*x+b x就是其深度 ,我们发现dfs序之后,修改一个点是差分一个区间,修改一个点的子树,可以 ...

  6. linux bash学习(一)

    1.请你以 read 指令的用途,撰写一个 script ,他可以让使用者输入:1. first name 与 2. last name, 最后并且在屏幕上显示:“Your full name is: ...

  7. fastjson解析服务端返回的数据

    1.配置依赖 //fastjson api 'com.alibaba:fastjson:1.2.44' 2.设计服务端返回的数据 {},{},{}]} 3.编写bean类,特别注意,要和服务端返回的类 ...

  8. Substrings Sort string 基本操作

    You are given nn strings. Each string consists of lowercase English letters. Rearrange (reorder) the ...

  9. web上传组件

    uploadify  jquery插件. common-fileipload; common-io ;jar

  10. oracle中分页的知识

    一:前言 自从出来实习后,基本上都没有按下心来总结下自己学的知识点,刚刚好现在快要国庆了,没有到深圳出差,在公司呆了三天,可以说是在公司打了三天的酱油啊,所以前两天都是在看些正则的文档,并且写了下总结 ...