线性筛的同时得到欧拉函数 (KuangBin板子)
线性筛的思想:每个被筛的数是通过它最小的质因子所筛去的。
这种思想保证了每个数只会被筛一次,从而达到线性。并且,这个思想实现起来非常巧妙(见代码注释)!
因为线性筛的操作中用到了倍数的关系去实现,因此欧拉函数可以顺便也计算出来,根据完全积性函数的性质还有数学推算,直接一条语句就算出来了。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<queue>
#include<stack>
#include<deque>
#include<iostream>
using namespace std;
typedef long long LL;
const int N = ; int check[N];
int prime[N];
int phi[N];
int cnt; void is_prime(int n)
{
int i,p,j;
cnt=;
phi[]=;
for(i=;i<=n;i++)
{
if(!check[i])
{
prime[cnt++]=i;
phi[i]=i-;
}
for(j=;j<cnt;j++)
{
if(i*prime[j]>n)
break;
check[i*prime[j]]=; if(i%prime[j]==)
{
/*因为 i%prime[j]==0 ,所以i 是 prime[j] 的倍数, i 就可以看成 prime[j]*k , 这样
就相当于筛去 prime[i]的k*prime[j+1] 倍,但是这个数不应当现在被处理,而是在 i==prime[j+1]*k时被筛掉 */ phi[i*prime[j]]=phi[i]*prime[j]; // 因为prime[j] 是质数,所以prime[j] 不可再分解,因此 i*prime[j] 的分解形式为 i 的分解形式再乘以 prime[j],
// 根据 欧拉函数的定义,i*prime[j] 的欧拉函数为 prime[j]*phi[i] ;
break;
}
else
phi[i*prime[j]]=phi[i]*(prime[j]-); //当 i 不是 prime[j] 的倍数的时候,欧拉函数位完全积性函数,满足积性函数的特点
}
}
}
int main()
{
int i,p,j,n;
is_prime();
for(i=;i<cnt;i++)
{
printf("%d ",prime[i]);
}
return ;
}
线性筛的同时得到欧拉函数 (KuangBin板子)的更多相关文章
- 【bzoj3512】DZY Loves Math IV 杜教筛+记忆化搜索+欧拉函数
Description 给定n,m,求\(\sum_{i=1}^{n}\sum_{j=1}^{m}\varphi(ij)\)模10^9+7的值. Input 仅一行,两个整数n,m. Output 仅 ...
- 数学基础IV 欧拉函数 Miller Rabin Pollard's rho 欧拉定理 行列式
找了一些曾经没提到的算法.这应该是数学基础系最后一篇. 曾经的文章: 数学基础I 莫比乌斯反演I 莫比乌斯反演II 数学基础II 生成函数 数学基础III 博弈论 容斥原理(hidden) 线性基(h ...
- POJ_3090 Visible Lattice Points 【欧拉函数 + 递推】
一.题目 A lattice point (x, y) in the first quadrant (x and y are integers greater than or equal to 0), ...
- POJ1284 Primitive Roots [欧拉函数,原根]
题目传送门 Primitive Roots Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5434 Accepted: ...
- BZOJ 2818: Gcd [欧拉函数 质数 线性筛]【学习笔记】
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 4436 Solved: 1957[Submit][Status][Discuss ...
- 素数的线性筛 && 欧拉函数
O(n) 筛选素数 #include<bits/stdc++.h> using namespace std; const int M = 1e6 + 10 ; int mindiv[M] ...
- The Euler function(线性筛欧拉函数)
/* 题意:(n)表示小于n与n互质的数有多少个,给你两个数a,b让你计算a+(a+1)+(a+2)+......+b; 初步思路:暴力搞一下,打表 #放弃:打了十几分钟没打完 #改进:欧拉函数:具体 ...
- 欧拉函数O(sqrt(n))与欧拉线性筛素数O(n)总结
欧拉函数: 对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目. POJ 2407.Relatives-欧拉函数 代码O(sqrt(n)): ll euler(ll n){ ll ans=n; ...
- 【bzoj2401】陶陶的难题I “高精度”+欧拉函数+线性筛
题目描述 求 输入 第一行包含一个正整数T,表示有T组测试数据.接下来T<=10^5行,每行给出一个正整数N,N<=10^6. 输出 包含T行,依次给出对应的答案. 样例输入 7 1 10 ...
随机推荐
- SQLite与ContentProvider
http://www.rom007.com/SQLite-yu-ContentProvider.html 在Android中,对于数据的存贮,有几种方式,有文件方式,有文件式数据库方式,Android ...
- 2013337朱荟潼 Linux第十八章读书笔记——调试
第十八章 调试 0.总结 oops 内核的调试配置 用Git进行二分搜索 bug总会有,简洁描述发给LKML 1. 准备开始 在用户级的程序里,bug表现比较直接:在内核中却不清晰. 2. 内核中的b ...
- 图文转化(Alpha)版使用说明
图文转化使用说明 本软件是一款扫描图片上的文字转化成txt或doc格式存储的软件. 现在还只是初期简单的一个实现,软件暂时的界面显示如下: 简介:照片选取的是手机里的本地照片,拍照打开照相机进行拍照. ...
- (Alpha)Let's-展示博客
Let's Alpha 项目答辩 ·选题由来 手机端——用户相对较多,使用环境限制相对宽松 手机游戏?校园p2p应用?线下交流!(滴滴打水?) 模式的选择:发起——加入活动 ...
- Beta版本讨论
目录 组员:胡绪佩 组员:何家伟 组员:黄鸿杰 组员: 翟丹丹 组员:周政演 组员:胡青元 组员:庄卉 组员:刘恺琳 组员:何宇恒 组员:刘一好 组员:葛家灿 组员:胡绪佩 总结 通过这次的Beta版 ...
- 关于Python matplotlib显示汉字乱码问题
我也是一个初学者,在今天编程时遇到的一个问题,我是基于Eclipse编写Python代码,在使用matplotlib进行数据可视化时,发现显示不了汉字并且出现乱码问题. (1)使用中文注释时报错: 解 ...
- tp5+layui 实现上传大文件
前言: 之前所写的文件上传类通常进行考虑的是文件的类型.大小是否符合要求条件.当上传大文件时就要考虑到php的配置和服务器的配置问题.之前简单的觉得只要将php.ini中的表单上传的 大小,单脚本执行 ...
- 获取所有选中框的ids值
var os = $("input[name='rec_ids[]']:checked"); var ids = []; os.each(function(i){ ids.push ...
- 如何取消mysql的密码?
有两种方法: 1.mysql命令 SET PASSWORD FOR root@localhost=PASSWORD(''); 2.运行 mysqladmin 命令 mysqladmin -u roo ...
- BZOJ 3171 循环格(费用流)
题意 一个循环格就是一个矩阵,其中所有元素为箭头,指向相邻四个格子.每个元素有一个坐标(行,列),其中左上角元素坐标为(0,0).给定一个起始位置(r,c),你可以沿着箭头防线在格子间行走.即如果(r ...