求1~n内全部数对(x,y),gcd(x,y)=质数,的对数。

思路:用f[n]求出,含n的对数。最后用sum【n】求和。

对于gcd(x,y)=a(设x<=y,a是质数),则必有gcd(x/a,y/a)=1;所以我仅仅要枚举i(设i=y/a),再枚举全部质数

他们乘积的f[i*a]值包含i的欧拉函数值。

时间复杂度(n*质数个数)

#include<iostream>
#include<cstring>
using namespace std;
const int maxx=100010;
int mindiv[maxx+5],phi[maxx+5];
void genphi() //求出1~n内全部数的欧拉函数值
{
for(int i=1; i<=maxx; i++)
{
mindiv[i]=i;
}
for(int i=2; i*i<=maxx; i++) //筛法
{
if(mindiv[i]==i)
{
for(int j=i*i; j<=maxx; j+=i)
{
mindiv[j]=i;
}
}
}
phi[1]=1;
for(int i=2; i<=maxx; i++)
{
phi[i]=phi[i/mindiv[i]];
if((i/mindiv[i])%mindiv[i]==0)
{
phi[i]*=mindiv[i];
}
else
{
phi[i]*=mindiv[i]-1;
}
}
}
int pri[maxx+5];
int nump=0; //素数个数
int pp[maxx+5]; //存素数
void getp()
{
for(int i=2;i<=maxx;i++)
{
while(i<=maxx&&pri[i])i++;
pp[nump++]=i;
for(int j=i*2;j<=maxx;j=j+i)
pri[j]=1;
}
}
long long f[maxx+5];
long long sum[maxx+5];
int main()
{
getp();
genphi();
for(int i=1;i<=maxx;i++) // 枚举每一个i。i=y/pp[j]()
{
for(int j=0;j<nump&&i*pp[j]<=maxx;j++) //枚举全部质数
{
if(i!=1) //(a,b)(b,a)算俩次。 f[i*pp[j]]+=phi[i]*2;
else f[i*pp[j]]+=phi[i];
}
}
long long tsum=0;
for(int i=1;i<=maxx;i++)
{
tsum+=f[i];
sum[i]=tsum;
}
int n;
while(cin>>n)
{
cout<<sum[n]<<endl;
} }

最新文章

  1. 从史上八大MySQL事故中学到的经验
  2. Matlab中一些函数的区别
  3. GPUimage实时滤镜的实现
  4. 时光煮雨 Unity3D实现2D人物移动-总结篇
  5. Android Studio-设置快速修复错误提示代码
  6. pip 添加trusted host 一劳永逸
  7. docker confluence
  8. HDU 3336 - Count the string(KMP+递推)
  9. ASP.NET缓存 Cache之数据缓存
  10. IOS-tableViewCell重用机制
  11. 国内外主流BI厂商对比
  12. Pop框架简述
  13. python enhanced generator - coroutine
  14. &ldquo;.Net 社区大会&rdquo;(dotnetConf) 2017 Day 1 Keynote: .NET Everywhere
  15. Java并发编程实战 之 线程安全性
  16. android 选项卡TabHost
  17. Linux 桌面玩家指南:02. 以最简洁的方式打造实用的 Vim 环境
  18. Chrome F12调试工具常用技巧
  19. 基于Selenium的web自动化框架
  20. Spotlight LGWR1 一直告警

热门文章

  1. fgets()函数和sscanf()函数的使用方法
  2. bzoj3713: [PA2014]Iloczyn(乱搞)
  3. 升级Xcode8后的相机crash问题-IOS10权限问题
  4. swift-初探webView与JS交互
  5. Ubuntu桌面基础介绍
  6. [SCOI 2005] 栅栏
  7. vue.js的学习之路
  8. go并发设计模式 --资源生成器模式
  9. ROS集成开发环境RoboWare Studio安装教程
  10. 使用 async/ await 进行 异步 编程