算法模板——线性欧拉函数

实现功能:求出1-N的欧拉函数,然后应对若干个询问操作

其实就是个素数判定+欧拉函数性质的二合一

代码如下,我觉得应高不难懂,只要你知道欧拉函数的性质

var
   i,j,k,l,m,n:longint;
   a,b:array[0..10000005] of longint;
procedure phi;
          var i,j:longint;
          begin
               m:=0;a[1]:=1;
               for i:=2 to n do
                   begin
                        if a[i]=0 then
                           begin
                                inc(m);
                                b[m]:=i;
                                a[i]:=i-1;
                           end;
                        for j:=1 to m do
                            begin
                                 if (i*b[j])>n then break;
                                 if (i mod b[j])=0 then
                                    a[i*b[j]]:=a[i]*b[j]
                                 else
                                     a[i*b[j]]:=a[i]*(b[j]-1);
                            end
                   end;
          end;
begin
     readln(n);phi;
     while true do
           begin
                readln(j);
                writeln(a[j]);
           end;
end.
时间: 2024-08-25 18:35:59

算法模板——线性欧拉函数的相关文章

【模板】欧拉函数

1 int Eular(int n) 2 { 3 int ans=1,i; 4 for(i=2;i<n;i++) 5 {if(n%i==0) 6 {n/=i; 7 ans*=(i-1); 8 while(n%i==0) 9 {n/=i; 10 ans*=i; 11 12 } 13 14 } 15 16 } 17 if(n>1) ans*=(n-1); 18 return ans; 19 } 也就是求小于或等于n的互质数的个数

bzoj 2818 gcd 线性欧拉函数

2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MB[Submit][Status][Discuss] Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. Input 一个整数N Output 如题 Sample Input 4 Sample Output 4 HINT hint 对于样例(2,2),(2,4),(3,3),(4,2) 1<=N<=10^7 思路:gcd(x,y)

数论 - 欧拉函数模板题 --- poj 2407 : Relatives

Relatives Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11372   Accepted: 5544 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 ther

POJ2478(SummerTrainingDay04-E 欧拉函数)

Farey Sequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16927   Accepted: 6764 Description The Farey Sequence Fn for any integer n with n >= 2 is the set of irreducible rational numbers a/b with 0 < a < b <= n and gcd(a,b)

poj 2480 欧拉函数+积性函数+GCD

题目:http://poj.org/problem?id=2480 首先要会欧拉函数:先贴欧拉函数的模板,来源于吉林大学的模板: //欧拉函数PHI(n)表示的是比n小,并且与n互质的正整数的个数(包括1). unsigned euler(unsignedx) {// 就是公式 unsigned i, res=x; for(i = 2; i < (int)sqrt(x * 1.0) + 1; i++) if(x%i==0) { res = res / i * (i - 1); while(x %

算法模板——单个值欧拉函数

输入N,输出phi(N) 这样的单个值欧拉函数程序一般见于部分数论题,以及有时候求逆元且取模的数不是质数的情况(逆元:A/B=A*Bphi(p)-1 (mod p),一般常见题中p是质数,phi(p)-1=p-2) (Tip:我是来水经验的不解释,不过话说真的好久没写这个了TT) 1 var i:int64; 2 function Eula(x:int64):int64; 3 var res:int64;i:longint; 4 begin 5 res:=x; 6 for i:=2 to tru

数论快速入门(同余、扩展欧几里德、中国剩余定理、大素数测定和整数分解、素数三种筛法、欧拉函数以及各种模板)

数学渣渣愉快的玩了一把数论,来总结一下几种常用的算法入门,不过鶸也是刚刚入门, 所以也只是粗略的记录下原理,贴下模板,以及入门题目(感受下模板怎么用的) (PS:文中蓝色字体都可以点进去查看百度原文) 附赠数论入门训练专题:点我打开专题(题目顺序基本正常,用以配套数论入门) 一.同余定理 简单粗暴的说就是:若 a-b == m 那么 a%m == b%m 这个模运算性质一眼看出...直接上入门水题: Reduced ID Numbers 附AC代码(这个也没啥模板....知道就好) #inclu

The Euler function(线性筛欧拉函数)

/* 题意:(n)表示小于n与n互质的数有多少个,给你两个数a,b让你计算a+(a+1)+(a+2)+......+b; 初步思路:暴力搞一下,打表 #放弃:打了十几分钟没打完 #改进:欧拉函数:具体证明看po主的博客 ^0^ #超时:这里直接用欧拉函数暴力搞还是不可以的,用到线性筛欧拉函数,这里总和爆int,要用long long */ #include<bits/stdc++.h> #define ll long long using namespace std; /***********

【自用】关于欧拉函数以及逆元的一些模板

求欧拉函数φ O()√时间复杂度的算法 首先我们要求φ(x),可以先将其分解成∏(apii)的形式,其中a是素数. 然后可以推导出公式φ(x)=∏(apii?api?1i) 然后这个可以实现为φ(x)=x/∏(ai?1) 这样就可以在√时间内出解了. 线性时间复杂度的算法 线性筛! 因为欧拉函数是积性函数,所以我们可以采用线性筛. 过程见下方代码getphi()函数. 基于欧拉函数的求逆元 首先有欧拉公式 xφ(p)%p==1 所以x?xφ(p)?1%p==1 这样xφ(p)?1就是x在mod