筛法求素数的核心就是让每个合数被它的最小质因子筛掉,那么剩下来的就是素数了。

于是在这个过程中我们可以顺便求出每个数的φ()、d()、e()。

ϕ:小于等于该数的与它互质的数的个数(一个数与其自身互质)
d:该数的正因数个数   
e:该数最小质因数的个数

其中上述三个函数均为不完全积性函数(即当x、y互质时才有f(xy)=f(x)f(y)),因此在筛法筛这三个函数时要有分情况讨论。

当x、y不互质时,φ(xy)=φ(x) y,其中y是x最小质因数(即)。由φ的通式可得:φ(xy)=xy(1-1/p1)(1-1/p2)…=xφ(y),所以在用最小素因子筛时就可求了。

当x、y不互质时,由d的通式(上百科自查吧)可得d(xy)=d(x)[e(x)+2]/[e(x)+1]。

当x、y不互质时,若x是y的最小质因数,则e(xy)=e(y)+1。

 下面就是代码了——

 #include<bits/stdc++.h>
using namespace std;
const int N = ;
int prime[N], e[N], d[N], tot, phi[N];
bool not_p[N];
inline void pre(){
not_p[] = ;
d[] = ;
for(int i = ; i < N; ++i){
if(!not_p[i]) {
++tot, prime[tot] = i;
e[i] = , d[i] = ; phi[i] = i - ;
}
for(int j = ; j <= tot; ++j){
int k = prime[j] * i;
if(k > N) break;
not_p[k] = ;
if(i % prime[j]) {
d[k] = d[i] * d[prime[j]];
e[k] = ;
phi[k] = phi[i] * phi[prime[j]];
}
else{
d[k] = d[i] / (e[i] + ) * (e[i] + );
e[k] = e[i] + ;
phi[k] = phi[i] * prime[j];
break;
}
}
}
}
int main(){
pre();
printf("phi:\n");
for(int i = ; i < N; ++i){
printf("%d\n", phi[i]);
}
printf("d:\n");
for(int i = ; i < N; ++i){
printf("%d\n", d[i]);
}
printf("prime:\n");
for(int i = ; i <= tot; ++i){
printf("%d\n", prime[i]);
}
return ;
}

欧拉筛法(phi,d,prime)的更多相关文章

  1. 『素数 Prime判定和线性欧拉筛法 The sieve of Euler』

    素数(Prime)及判定 定义 素数又称质数,一个大于1的自然数,除了1和它自身外,不能整除其他自然数的数叫做质数,否则称为合数. 1既不是素数也不是合数. 判定 如何判定一个数是否是素数呢?显然,我 ...

  2. 【模板】埃拉托色尼筛法 && 欧拉筛法 && 积性函数

    埃拉托色尼筛法 朴素算法 1 vis[1]=1; 2 for (int i=2;i<=n;i++) 3 if (!vis[i]) 4 { 5 pri[++tot]=i; 6 for (int j ...

  3. [洛谷P3383][模板]线性筛素数-欧拉筛法

    Description 如题,给定一个范围N,你需要处理M个某数字是否为质数的询问(每个数字均在范围1-N内) Input&Output Input 第一行包含两个正整数N.M,分别表示查询的 ...

  4. 素数判断-----埃氏筛法&欧拉筛法

    埃氏筛法 /* |埃式筛法| |快速筛选素数| |15-7-26| */ #include <iostream> #include <cstdio> using namespa ...

  5. 2018牛客网暑期ACM多校训练营(第三场) H - Diff-prime Pairs - [欧拉筛法求素数]

    题目链接:https://www.nowcoder.com/acm/contest/141/H 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K ...

  6. (数论 欧拉筛法)51NOD 1106 质数检测

    给出N个正整数,检测每个数是否为质数.如果是,输出"Yes",否则输出"No".   Input 第1行:一个数N,表示正整数的数量.(1 <= N &l ...

  7. 欧拉筛法模板&&P3383 【模板】线性筛素数

    我们先来看欧拉筛法 •为什么叫欧拉筛呢?这可能是跟欧拉有关 •但是为什么叫线性筛呢?因为它的复杂度是线性的,也就是O(n),我们直接来看代码   #include<cstdio> #inc ...

  8. 素数筛总结篇___Eratosthenes筛法和欧拉筛法(*【模板】使用 )

    求素数 题目描述 求小于n的所有素数的数量. 输入 多组输入,输入整数n(n<1000000),以0结束. 输出 输出n以内所有素数的个数. 示例输入 10 0 示例输出 4 提示 以这道题目为 ...

  9. 欧拉函数 &【POJ 2478】欧拉筛法

    通式: $\phi(x)=x(1-\frac{1}{p_1})(1-\frac{1}{p_2})(1-\frac{1}{p_3}) \cdots (1-\frac{1}{p_n})$ 若n是质数p的k ...

随机推荐

  1. Python创建数组

    1  创建数组 array函数 >>> a=([1,2],[3,4]) >>> array(a) array([[1, 2], [3, 4]]) arange函数: ...

  2. 【MarkDown】使用Html样式和折叠语法

    MarkDown很方便,但基本语法有些不足:比如无法使用折叠语法,无法让文字有不同的颜色. 这些功能可以实现,不过需要使用Html语法进行扩展.这篇文章主要是整理一下这些技巧,方便更好的使用. 一.折 ...

  3. 帝国CMS 7.2数据导入后的参数修正

    1.日期转时间戮,HTML文件名,目录名更改 update cms_ecms_jdba set newstime = UNIX_TIMESTAMP(submitTime),titleurl = CON ...

  4. HTTP 错误 500.21 - Internal Server Error 解决方案(转)

    不久前重新安装了Windows7,在安装了VS2010 开发平台之后,将网站发布到IIS,访问发生如下错误: HTTP 错误 500.21 - Internal Server Error处理程序“Ni ...

  5. MongoDB的Python客户端PyMongo(转)

    原文:https://serholiu.com/python-mongodb 这几天在学习Python Web开发,于是做准备做一个博客来练练手,当然,只是练手的,博客界有WordPress这样的好玩 ...

  6. phalcon—— PHP基础知识(一)

    一.变量和常量 1.1.变量名(标示符) 1)变量:$开头标志 2)变量名:能够由字母.数字,_ 3者组成,不能用数字开头 3)标识符是区分大写和小写的.但函数名不区分大写和小写. 4)变量名称能够与 ...

  7. 006-基于hyperledger fabric1.4( 官方文档)编写第一个应用【外部nodejs调用】

    一.概述 官方原文地址 Writing Your First Application如果对fabric网络的基本运行机制不熟悉的话,请看这里. 注意:本教程是对fabric应用以及如何使用智能合约的简 ...

  8. C# 调用win api获取chrome浏览器中地址

    //FindWindow 查找窗口 //FindWindowEx查找子窗口 //EnumWindows列举屏幕上的所有顶层窗口,如果回调函数成功则返回非零,失败则返回零 //GetWindowText ...

  9. 吴超老师课程---ZooKeeper介绍和集群安装

    1.ZooKeeper    1.1 zk可以用来保证数据在zk集群之间的数据的事务性一致.2.如何搭建ZooKeeper服务器集群    2.1 zk服务器集群规模不小于3个节点,要求各服务器之间系 ...

  10. redis的一些命令

    字符串操作 EX在设置值的时候设置过期时间,ttl查看过期时间 expire能单独设置过期时间 查看所有的key key * 列表操作 lpush从列表左边添加值,rpush从列表右边添加值 lran ...