欧拉筛法(phi,d,prime)
筛法求素数的核心就是让每个合数被它的最小质因子筛掉,那么剩下来的就是素数了。
于是在这个过程中我们可以顺便求出每个数的φ()、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)的更多相关文章
- 『素数 Prime判定和线性欧拉筛法 The sieve of Euler』
素数(Prime)及判定 定义 素数又称质数,一个大于1的自然数,除了1和它自身外,不能整除其他自然数的数叫做质数,否则称为合数. 1既不是素数也不是合数. 判定 如何判定一个数是否是素数呢?显然,我 ...
- 【模板】埃拉托色尼筛法 && 欧拉筛法 && 积性函数
埃拉托色尼筛法 朴素算法 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 ...
- [洛谷P3383][模板]线性筛素数-欧拉筛法
Description 如题,给定一个范围N,你需要处理M个某数字是否为质数的询问(每个数字均在范围1-N内) Input&Output Input 第一行包含两个正整数N.M,分别表示查询的 ...
- 素数判断-----埃氏筛法&欧拉筛法
埃氏筛法 /* |埃式筛法| |快速筛选素数| |15-7-26| */ #include <iostream> #include <cstdio> using namespa ...
- 2018牛客网暑期ACM多校训练营(第三场) H - Diff-prime Pairs - [欧拉筛法求素数]
题目链接:https://www.nowcoder.com/acm/contest/141/H 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K ...
- (数论 欧拉筛法)51NOD 1106 质数检测
给出N个正整数,检测每个数是否为质数.如果是,输出"Yes",否则输出"No". Input 第1行:一个数N,表示正整数的数量.(1 <= N &l ...
- 欧拉筛法模板&&P3383 【模板】线性筛素数
我们先来看欧拉筛法 •为什么叫欧拉筛呢?这可能是跟欧拉有关 •但是为什么叫线性筛呢?因为它的复杂度是线性的,也就是O(n),我们直接来看代码 #include<cstdio> #inc ...
- 素数筛总结篇___Eratosthenes筛法和欧拉筛法(*【模板】使用 )
求素数 题目描述 求小于n的所有素数的数量. 输入 多组输入,输入整数n(n<1000000),以0结束. 输出 输出n以内所有素数的个数. 示例输入 10 0 示例输出 4 提示 以这道题目为 ...
- 欧拉函数 &【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 ...
随机推荐
- Python创建数组
1 创建数组 array函数 >>> a=([1,2],[3,4]) >>> array(a) array([[1, 2], [3, 4]]) arange函数: ...
- 【MarkDown】使用Html样式和折叠语法
MarkDown很方便,但基本语法有些不足:比如无法使用折叠语法,无法让文字有不同的颜色. 这些功能可以实现,不过需要使用Html语法进行扩展.这篇文章主要是整理一下这些技巧,方便更好的使用. 一.折 ...
- 帝国CMS 7.2数据导入后的参数修正
1.日期转时间戮,HTML文件名,目录名更改 update cms_ecms_jdba set newstime = UNIX_TIMESTAMP(submitTime),titleurl = CON ...
- HTTP 错误 500.21 - Internal Server Error 解决方案(转)
不久前重新安装了Windows7,在安装了VS2010 开发平台之后,将网站发布到IIS,访问发生如下错误: HTTP 错误 500.21 - Internal Server Error处理程序“Ni ...
- MongoDB的Python客户端PyMongo(转)
原文:https://serholiu.com/python-mongodb 这几天在学习Python Web开发,于是做准备做一个博客来练练手,当然,只是练手的,博客界有WordPress这样的好玩 ...
- phalcon—— PHP基础知识(一)
一.变量和常量 1.1.变量名(标示符) 1)变量:$开头标志 2)变量名:能够由字母.数字,_ 3者组成,不能用数字开头 3)标识符是区分大写和小写的.但函数名不区分大写和小写. 4)变量名称能够与 ...
- 006-基于hyperledger fabric1.4( 官方文档)编写第一个应用【外部nodejs调用】
一.概述 官方原文地址 Writing Your First Application如果对fabric网络的基本运行机制不熟悉的话,请看这里. 注意:本教程是对fabric应用以及如何使用智能合约的简 ...
- C# 调用win api获取chrome浏览器中地址
//FindWindow 查找窗口 //FindWindowEx查找子窗口 //EnumWindows列举屏幕上的所有顶层窗口,如果回调函数成功则返回非零,失败则返回零 //GetWindowText ...
- 吴超老师课程---ZooKeeper介绍和集群安装
1.ZooKeeper 1.1 zk可以用来保证数据在zk集群之间的数据的事务性一致.2.如何搭建ZooKeeper服务器集群 2.1 zk服务器集群规模不小于3个节点,要求各服务器之间系 ...
- redis的一些命令
字符串操作 EX在设置值的时候设置过期时间,ttl查看过期时间 expire能单独设置过期时间 查看所有的key key * 列表操作 lpush从列表左边添加值,rpush从列表右边添加值 lran ...