NKOJ 3800 分解质因数(欧拉函数+线性筛)
来源:互联网 发布:vb.net excel 数据库 编辑:程序博客网 时间:2024/05/22 04:27
P3801分解质因数
问题描述
记Pi表示正整数i的质因数集合。
已知正整数n,求满足下列条件的有序正整数对(a,b)的数目:
(1)1<=a<=b<=n
(2)t为a,b的最大公约数,Pt是Pn的子集
输入格式
一个正整数n.
输出格式
一个正整数,表示合题意的有序正整数对的数目.
样例输入 1
6
样例输出 1
20
样例输入 2
7
样例输出 2
19
数据范围
50%的数据1<=n<=2000;
100%的数据1<=n<=1000000.
此题有两种做法。
做法一:先介绍一种比较简单粗暴的。
我们考虑一个数
总之,我们求出了
那么显然我们只需要找出在
代码:
#include<stdio.h>#include<iostream>#include<algorithm>#define N 1000005#define ll long longusing namespace std;ll n,phi[N],S[N],P[N],tot,ans;bool mark[N];int main(){ ll i,j; scanf("%lld",&n);phi[1]=1;S[1]=1; for(i=2;i<=n;i++) { if(!phi[i])phi[i]=i-1,P[++tot]=i; for(j=1;j<=tot&&P[j]*i<=n;j++) if(i%P[j])phi[i*P[j]]=phi[i]*(P[j]-1); else {phi[i*P[j]]=phi[i]*P[j];break;} S[i]=S[i-1]+phi[i]; } for(i=1;i<=tot;i++)if(n%P[i])for(j=P[i];j<=n;j+=P[i])mark[j]=1; for(i=1;i<=n;i++)if(!mark[i])ans+=S[n/i]; printf("%lld",ans);}
做法二:
做法二比较的巧妙,我们可以认为在
具体来说,我们在普通的线性筛中,遇到质数时判断一下,如果这个质数在
代码:
#include<stdio.h> #include<iostream> #include<cmath> using namespace std; const int N=20000050; int n,phi[N],prime[N]; bool mark[N],p[N]; void linear() { int i,j,tot=0; phi[1]=1; for(i=2;i<=n;i++) { if(!phi[i]) { if(!p[i])phi[i]=i-1; else phi[i]=i; prime[++tot]=i; } for(j=1;j<=tot&&prime[j]*i<=n;j++) if(i%prime[j]==0){phi[i*prime[j]]=phi[i]*prime[j];break;} else phi[i*prime[j]]=phi[i]*(phi[prime[j]]); }} main() { int i,j,k; cin>>n; int tmp=n; for(i=2;i*i<=n&&tmp!=1;i++) if(tmp%i==0) { while(tmp%i==0)tmp/=i; p[i]=true; } if(tmp!=1)p[tmp]=true; linear(); long long ans=0; for(i=1;i<=n;i++)ans+=1LL*(phi[i]); cout<<ans;}
阅读全文
0 0
- NKOJ 3800 分解质因数(欧拉函数+线性筛)
- 分解质因数 欧拉函数
- phi(大数质因数分解欧拉函数)
- poj2154质因数分解+快速幂+欧拉函数解决
- 【题】【数学(欧拉函数)】NKOJ3801 分解质因数
- HDU 1695 GCD 【容斥】【质因数分解】【欧拉函数】
- 【HDU1695】 GCD (欧拉筛+欧拉函数+质因数分解+容斥原理)
- NKOJ 4040 (CQOI 2017) 小Q的表格(莫比乌斯反演+分块+递推+线性筛/欧拉函数+分块+线性筛)
- bzoj 2721: [Violet 5]樱花 (线性筛+质因数分解)
- 一个线性时间复杂度的质因数分解函数(查找全部的素数、得到全部的质因数分解个数)
- 求数论求约数和 与 互质和算法 (分解质因数与欧拉函数)
- HDU 1695 GCD 欧拉函数+容斥原理+质因数分解
- 欧拉筛(线性筛)& 欧拉函数
- bzoj 3813: 奇数国 (线段树+质因数分解+线性筛+线性逆元)
- Pollard的rho启发式因子分解算法 & [CodeVS 4939] 欧拉函数:Miller-Rabin + Pollard-rho 质因数分解
- hdu 3589 Jacobi symbol(欧拉准则暴力求解+分解质因数+素数筛表)
- 函数:分解质因数
- 函数分解质因数
- HDOJ2047_阿牛的EOF牛肉串
- 归并排序(python)
- JSP中的绝对路径与相对路径
- Android Data Analyse(3)--APN & ApnSetting & ApnContext
- 乔布斯传名言(笔记)——Goging Pubilc
- NKOJ 3800 分解质因数(欧拉函数+线性筛)
- 鼠标悬停动画
- Linux单元小结(2)
- 算法题练习系列之(三十六): 养兔子
- Hashtable
- 【Linux】Vim修改tab为4个空格
- POJ1577 二叉排序树
- 一个简单的jdbc
- 第一篇博客--男人与男孩的区别