O(n) 筛选素数

#include<bits/stdc++.h>
using namespace std;
const int M = 1e6 + 10 ; int mindiv[M] ;//每个数的最小质因数
int prim[M] , pnum ;//存素数
bool vis[M] ; void prim () {
for (int i = 2 ; i < M ; i ++) {
if (!vis[i]) {
mindiv[i] = i ;
prim[ pnum++ ] = i ;
}
for (int j = 0 ; j < pnum ; j ++) {
if ( i*prim[j] >= M ) break ;
vis[ i*prim[j] ] = 1 ;
mindiv[i] = prim[j] ;
if (i % prim[j] == 0) break ;
}
}
} int main () {
prim () ;
return 0 ;
}

  欧拉函数:phi[i] 为<= i 的范围内与i互质的数的数量

  欧拉埃筛,写起来简单,复杂度O(log(log(N)))(zstu 幻神):

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int M = 1e6 + 10 ; int n, m, T; int euler[M]; void Euler () {
for(int i = 0; i < M ; i ++) euler[i] = i;
for(int i = 2; i < M ; i ++){
if(euler[i] == i) {
for (int j = i; j < M ; j += i) {
euler[j] = euler[j] - euler[j]/i;
}
}
}
} int main(){
Euler ();
int n ;
while (~ scanf ("%d" , &n)) printf ("%d\n" , euler[n]) ;
return 0;
}

  

欧拉线筛,写起来复杂点,(墨迹了我半天)复杂度O(N):

#include<bits/stdc++.h>
using namespace std;
const int M = 1e6 + 10 ;
int prim[M] , pnum ;
bool vis[M] ;
int phi[M] ; void Euler () {
for (int i = 2 ; i < M ; i ++) {
if (!vis[i]) {
prim[ pnum++ ] = i ;
phi[i] = i - 1;
}
for (int j = 0 ; j < pnum ; j ++) {
int x = i * prim[j] ;
if (x >= M ) break ;
vis[x] = 1 ;
if (i % prim[j] == 0) {
int y = i , cnt = 0 , z = prim[j] ;
while (y % prim[j] == 0) cnt ++ , y /= prim[j] , z *= prim[j] ;
if (y == 1) phi[x] = x - x/prim[j] ;
else phi[x] = phi[y] * phi[z] ;
break ;
}
else phi[x] = phi[i] * phi[ prim[j] ] ;
}
}
} int main () {
Euler () ;
int n ;
while (~ scanf ("%d" , &n)) printf ("%d\n" , phi[n]) ;
return 0 ;
}

  线性欧拉跟新:

#include<cstdio>
#include<iostream>
using namespace std;
int prime[100005],phi[1000005];
int main(){
int i,j;
for(i=2;i<1000002;++i){
if(!phi[i]){
phi[i]=i-1;
prime[++prime[0]]=i;
}
for(j=1;j<=prime[0]&&(long long)i*prime[j]<1000002;++j)
if(i%prime[j])phi[i*prime[j]]=phi[i]*(prime[j]-1);
else{
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
}
int T,n;
scanf("%d",&T);
while(T--){
scanf("%d",&n);
printf("%d\n",phi[n+1]);
}
}

  

素数的线性筛 && 欧拉函数的更多相关文章

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

    /* 题意:(n)表示小于n与n互质的数有多少个,给你两个数a,b让你计算a+(a+1)+(a+2)+......+b; 初步思路:暴力搞一下,打表 #放弃:打了十几分钟没打完 #改进:欧拉函数:具体 ...

  2. 积性函数&线性筛&欧拉函数&莫比乌斯函数&因数个数&约数个数和

    只会搬运YL巨巨的博客 积性函数 定义 积性函数:对于任意互质的整数a和b有性质f(ab)=f(a)f(b)的数论函数. 完全积性函数:对于任意整数a和b有性质f(ab)=f(a)f(b)的数论函数 ...

  3. [bzoj 2190][SDOI2008]仪仗队(线性筛欧拉函数)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2190 分析:就是要线性筛出欧拉函数... 直接贴代码了: memset(ans,,sizeof ...

  4. Bzoj 2186: [Sdoi2008]沙拉公主的困惑 乘法逆元,线性筛,欧拉函数,数论

    2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 2560  Solved: 857[Submit][St ...

  5. BZOJ 2190 仪仗队(线性筛欧拉函数)

    简化题意可知,实际上题目求得是gcd(i,j)=1(i,j<=n)的数对数目. 线性筛出n大小的欧拉表,求和*2+1即可.需要特判1. # include <cstdio> # in ...

  6. poj1248 (线性筛欧拉函数)(原根)

    强烈鸣谢wddwjlss 题目大意:给出一个奇素数,求出他的原根的个数,多组数据. 这里先介绍一些基本性质 阶 设\((a,m)=1\),满足\(a^r \equiv 1 \pmod m\)的最小正整 ...

  7. BZOJ 2818 GCD 素数筛+欧拉函数+前缀和

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2818 题意:给定整数N,求1<=x,y<=n且Gcd(x,y)为素数的数对( ...

  8. noip复习——线性筛(欧拉筛)

    整数的唯一分解定理: \(\forall A\in \mathbb {N} ,\,A>1\quad \exists \prod\limits _{i=1}^{s}p_{i}^{a_{i}}=A\ ...

  9. Farey Sequence (素筛欧拉函数/水)题解

    The Farey Sequence Fn for any integer n with n >= 2 is the set of irreducible rational numbers a/ ...

随机推荐

  1. 个人作业—Week2:微软必应词典案例分析

    调研.评测 bug报告: 标题:Window 10版必应词典客户端口语练习功能无法使用 环境:Window 10, 微软必应词典(UWP) 版本2.6.1.0,屏幕无重力感应模块 重现步骤: 1)   ...

  2. 淘宝npm镜像

    来源:https://cnodejs.org/topic/4f9904f9407edba21468f31e 镜像使用方法(三种办法任意一种都能解决问题,建议使用第三种,将配置写死,下次用的时候配置还在 ...

  3. Tarjan_LCA

    貌似求LCA使用倍增已经可以应付掉大多数需要LCA的题了.. 但是有些时候$O(MlogN)$的复杂度就不可接受了 Tarjan_LCA对于每个询问采用离线处理 总复杂度为$O(M+N)$ 这个复杂度 ...

  4. linux忘记mysql密码找回方法

    linux忘记mysql教程密码找回方法 今天我们主要是讲一下关于linux忘记mysql密码处理方法,下面提供了5种linux忘记mysql密码找回方法哦.    方法一: # /etc/init. ...

  5. 手写控件,frame,center和bounds属性

    一.手写控件 1.手写控件的步骤 (1)使用相应的控件类创建控件对象 (2)设置该控件的各种属性 (3)添加控件到视图中 (4)如果是button等控件,还需考虑控件的单击事件等 (5)注意:View ...

  6. 记录s标签范例

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  7. js正则匹配浮点数或整数

    var pos='point(12.4 -45.423453)';var re = /([+]\d+[.]\d+|[-]\d+[.]\d+|\d+[.]\d+|[+]\d+|[-]\d+|\d+)/i ...

  8. webkit的一些不为人知的高级属性

    1.-webkit-tap-highlight-color   tap按钮或者链接时,就会出现一个半透明的灰色背景,设置属性: -webkit-tap-highlight-color:transpar ...

  9. Quartz.NET总结(二)CronTrigger和Cron表达式

    Quartz.NET的任务调度,主要就是依靠CronTrigger和Cron表达式.Cron是已经在UNIX存在了很长一段时间,它有着强大和可靠的调度能力.CronTrigger类也正是是基于Cron ...

  10. Spring--Spring容器

    在使用Spring所提供的各种丰富而神奇的功能之前,必须要在Spring IoC容器中装配好Bean,并建立Bean和Bean之间的关联关系. Spring提供了多种配置方式来实现Bean的装配.但在 ...