剑指offer.C++数论 gcd 巧解——运用 欧式筛法&欧拉函数 快速求解

前言

数论大法好,人间真善美。。。


题目描述

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

输入

一个整数

1<=N<=1000000

输出

一个整数

样例输入

4

样例输出

4

提示

【样例解释】

(2,2),(2,4),(3,3),(4,2)


思路

拿到这道题很容易想到暴搜,但数据范围很大,所以就要用欧拉函数(不懂的点一下),那又该怎样用欧拉函数来做呢,求的是 gcd(x,y) 为质数的个数,那就是说 x 和 y 除以这个质数就互质了,就只需要枚举 n 以内的质数就行了。

如果已知一质数  k , 则就是求 n/k 以内的互质数。

如果 ( x , y ) 互质,那么 ( y , x ) 也互质 ,所以答案需要乘 2 ,但

posted @ 2019-04-09 14:22  Nomad_Joe_violet  阅读(4)  评论(0编辑  收藏  举报  来源