码迷,mamicode.com
首页 > 其他好文 > 详细

2818: Gcd

时间:2016-05-07 23:28:29      阅读:538      评论:0      收藏:0      [点我收藏+]

标签:

2818: Gcd

Time Limit: 10 Sec  Memory Limit: 256 MB
Submit: 3518  Solved: 1554
[Submit][Status][Discuss]

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;

思路:欧拉函数;

要求<=N有多少对数的gcd是素数;

但这些数对除去最大公约数时他们的最大公约数是1,那么我们只要筛选出[1,N]的素数。

素数的数组是a[];那么在[1,N]中找含有素数a[i]的数那么就是N/a[i]个,然后求这些数的每个的欧拉函数,再前缀和加下,除了oula[1]外,oula[]*=2;

枚举每个小余等于N的素数加oula[]前缀和;

 1 #include<stdio.h>
 2 #include<algorithm>
 3 #include<iostream>
 4 #include<stdlib.h>
 5 #include<string.h>
 6 #include<math.h>
 7 using namespace std;
 8 typedef long long LL;
 9 int ans[1000000];
10 LL oula[10000005];
11 LL ask[10000005];
12 int  ola(int n);
13 int main(void)
14 {
15         int i,j,k;
16 
17         LL n,m;
18         scanf("%lld",&n);
19         int cnt=ola(n);
20         LL sum=0;
21         for(i=0; i<cnt; i++)
22         {
23                 sum+=oula[n/ans[i]];
24         }
25         printf("%lld\n",sum);
26         return 0;
27 }
28 int  ola(int n)
29 {
30         int i,j;
31         oula[1]=1;
32         int cnt=0;
33         for(i=0;i<=n;i++)
34         {
35             oula[i]=i;
36         }
37         for(i=2; i<=n; i++)
38         {
39                 if(oula[i]==i)
40                 {
41                         for(j=i; j<=n; j+=i)
42                         {
43                                 oula[j]=oula[j]/i*(i-1);
44                         }
45                 }
46         }
47         for(i=2; i<=n; i++)
48         {
49                 if(oula[i]==i-1)
50                 {
51                         ans[cnt++]=i;
52                 }
53         }
54         for(i=2; i<=n; i++)
55         {
56                 oula[i]*=2;
57                 oula[i]+=oula[i-1];
58         }
59         return cnt;
60 }

 

2818: Gcd

标签:

原文地址:http://www.cnblogs.com/zzuli2sjy/p/5469438.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!