2818: Gcd

Time Limit: 10 Sec  Memory Limit: 256 MB
Submit: 1633  Solved: 724
[Submit][Status]

Description

给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的
数对(x,y)有多少对.

Input

一个整数N

Output

如题

Sample Input

4

Sample Output

4

HINT

hint

对于样例(2,2),(2,4),(3,3),(4,2)

1<=N<=10^7

Source

求gcd(x,y)==prime[k] 對數(1<=x,y<=n)

枚舉質數p,求gcd(x,y)==1, (1<=x,y<=n/p)

設sphi(k)表示gcd(x,y)==1,(1<=x,y<=k),那麼,可以通過幾何法推導出sphi(k)=phi(k)*2+sphi(k-1)

然後此題可解。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<string>
#include<queue>
using namespace std;
#ifdef WIN32
#define LL "%I64d"
#else
#define LL "%lld"
#endif
#define MAXN 11000000
#define MAXV MAXN*2
#define MAXE MAXV*2
#define INF 0x3f3f3f3f
#define INFL 0x3f3f3f3f3f3f3f3fLL
typedef long long qword;
inline int nextInt()
{
char ch;
int x=;
bool flag=false;
do
ch=getchar(),flag=(ch=='-')?true:flag;
while(ch<''||ch>'');
do x=x*+ch-'';
while (ch=getchar(),ch<='' && ch>='');
return x*(flag?-:);
} int n,m;
bool pflag[MAXN];
int prime[MAXN],topp=-;;
int phi[MAXN];
void init()
{
int i,j,k;
int x,y;
phi[]=;
for (i=;i<MAXN;i++)
{
if (!pflag[i])
{
prime[++topp]=i;
phi[i]=i-;
}
for (j=;j<=topp && i*prime[j]<MAXN;j++)
{
pflag[i*prime[j]]=true;
phi[i*prime[j]]=phi[i]*phi[prime[j]];
if (i%prime[j]==)
{
x=i;y=prime[j];
k=;
while (x%prime[j]==)
{
x/=prime[j];
y*=prime[j];
k++;
}
if (x==)
{
phi[i*prime[j]]=y-y/prime[j];
}else
{
phi[i*prime[j]]=phi[x]*phi[y];
}
break;
}
}
}
}
qword sphi[MAXN];
int main()
{
freopen("input.txt","r",stdin);
int i,j,k;
init();
scanf("%d",&n);
qword ans=;
sphi[]=;
for (i=;i<=n;i++)
sphi[i]=sphi[i-]+phi[i]*;
for (i=;i<=topp && prime[i]<=n;i++)
{
ans+=sphi[n/prime[i]];
}
printf(LL"\n",ans);
}

最新文章

  1. Oracle10G无图形安装及升级
  2. 刷了OpenWrt Attitude Adjustment 12.09,很满意
  3. RN组件之Navigator
  4. fnd_profile.value(&#39;AFLOG_ENABLED&#39;)的取值 和配置文件相关SQL
  5. git 检出
  6. JAVA多线程学习3--线程一些方法
  7. android studio SDK版本的调节
  8. Agri-Net(prim算法,最小生成树问题)
  9. perl版 Webshell存活检测
  10. JS数组去重的十种方法
  11. Java平台与.Net平台在服务器端前景预测
  12. Tomcat部署war应用总结
  13. elasticsearch简单操作(一)
  14. Django之Bootstrap使用
  15. NGUI的UIRoot会移动
  16. funny
  17. 知乎网的CSS命名规律研究
  18. AOP中Advice执行两遍的原因
  19. 解决oracle12c安装报“[INS-30131]执行安装程序验证所需的初始设置失败(原因:无法访问临时位置)”方法
  20. nexus 私服跑一跑流程

热门文章

  1. [TypeScript] Installing TypeScript and Running the TypeScript Compiler (tsc)
  2. cookie记录用户名和密码
  3. 高性能爬虫为什么使用定制DNS客户端?
  4. Oracle 设置日志模式
  5. 安装指南:Win10下安装CentOs7
  6. css:nth-of-type()选择器用法
  7. js判断手机端操作系统(Andorid/IOS)
  8. TransactionScope简单用法
  9. 恢复误删的procedure
  10. 《转》15种CSS混合模式让图片产生令人惊艳的效果