Co-prime

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3313    Accepted Submission(s): 1286

Problem Description
Given a number N, you are asked to count the number of integers between A and B inclusive which are relatively prime to N.
Two integers are said to be co-prime or relatively prime if they have no common positive divisors other than 1 or, equivalently, if their greatest common divisor is 1. The number 1 is relatively prime to every integer.
 
Input
The first line on input contains T (0 < T <= 100) the number of test cases, each of the next T lines contains three integers A, B, N where (1 <= A <= B <= 1015) and (1 <=N <= 109).
 
Output
For each test case, print the number of integers between A and B inclusive which are relatively prime to N. Follow the output format below.
 
Sample Input
2
1 10 2
3 15 5
 
Sample Output
Case #1: 5
Case #2: 10

Hint

In the first test case, the five integers in range [1,10] which are relatively prime to 2 are {1,3,5,7,9}.

 
Source
 
Recommend
lcy   |   We have carefully selected several similar problems for you:  1434 1502 4136 4137 4138 
思路:素数打表+容斥原理;
因为要求在[n,m]中与互质的数的个数。
先打表求素数,然后分解k,求出k由哪些素数组成,然后我们可以用容斥求出[n,m]中与k不互质的数,然后区间长度减下即可;
每个数的质因数个数不会超过20个。
  1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<stdlib.h>
5 #include<string.h>
6 #include<vector>
7 #include<queue>
8 #include<stack>
9 using namespace std;
10 long long gcd(long long n,long long m);
11 bool prime[100005];
12 int ans[100005];
13 int bns[100005];
14 int dd[100005];
15 typedef long long LL;
16 int main(void)
17 {
18 int i,j,k;
19 scanf("%d",&k);
20 int s;
21 LL n,m,x;
22 for(i=2; i<=1000; i++)
23 {
24 if(!prime[i])
25 {
26 for(j=i; i*j<=100000; j++)
27 {
28 prime[i*j]=true;
29 }
30 }
31 }
32 int cnt=0;
33 for(i=2; i<=100000; i++)
34 {
35 if(!prime[i])
36 {
37 ans[cnt++]=i;
38 }
39 }
40 for(s=1; s<=k; s++)
41 {
42 int uu=0;
43 memset(dd,0,sizeof(dd));
44 scanf("%lld %lld %lld",&n,&m,&x);
45 while(x>=1&&uu<cnt)
46 {
47 if(x%ans[uu]==0)
48 {
49 dd[ans[uu]]=1;
50 x/=ans[uu];
51 }
52 else
53 {
54 uu++;
55 }
56 }
57 int qq=0;
58 for(i=2; i<=100000; i++)
59 {
60 if(dd[i])
61 {
62 bns[qq++]=i;
63 }
64 }
65 if(x!=1)
66 bns[qq++]=x;
67 n--;
68
69 LL nn=0;
70 LL mm=0;
71 for(i=1; i<=(1<<qq)-1; i++)
72 {
73 int xx=0; LL sum=1;
74 int flag=0;
75 for(j=0; j<qq; j++)
76 {
77 if(i&(1<<j))
78 {
79 xx++;
80 LL cc=gcd(sum,bns[j]);
81 sum=sum/cc*bns[j];
82 if(sum>m)
83 {
84 flag=1;
85 break;
86 }
87 }
88 }
89 if(flag)
90 continue;
91 else
92 {
93 if(xx%2==0)
94 {
95 nn-=n/sum;
96 mm-=m/sum;
97 }
98 else
99 {
100 nn+=n/sum;
101 mm+=m/sum;
102 }
103 }
104 }m-=mm;n-=nn;
105 printf("Case #%d: ",s);
106 printf("%lld\n",m-n);
107 }
108 return 0;
109 }
110 long long gcd(long long n,long long m)
111 {
112 if(m==0)
113 return n;
114 else if(n%m==0)
115 return m;
116 else return gcd(m,n%m);
117 }
 

Co-prime(hdu4135)的更多相关文章

  1. [HDU4135]CO Prime(容斥)

    也许更好的阅读体验 \(\mathcal{Description}\) \(t\)组询问,每次询问\(l,r,k\),问\([l,r]\)内有多少数与\(k\)互质 \(0<l<=r< ...

  2. 【hdu4135】【hdu2841】【hdu1695】一类通过容斥定理求区间互质的方法

    [HDU4135]Co-prime 题意 给出三个整数N,A,B.问在区间[A,B]内,与N互质的数的个数.其中N<=10^9,A,B<=10^15. 分析 容斥定理的模板题.可以通过容斥 ...

  3. Java 素数 prime numbers-LeetCode 204

    Description: Count the number of prime numbers less than a non-negative number, n click to show more ...

  4. Prime Generator

    Peter wants to generate some prime numbers for his cryptosystem. Help him! Your task is to generate ...

  5. POJ 2739. Sum of Consecutive Prime Numbers

    Sum of Consecutive Prime Numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 20050 ...

  6. UVa 524 Prime Ring Problem(回溯法)

    传送门 Description A ring is composed of n (even number) circles as shown in diagram. Put natural numbe ...

  7. Sicily 1444: Prime Path(BFS)

    题意为给出两个四位素数A.B,每次只能对A的某一位数字进行修改,使它成为另一个四位的素数,问最少经过多少操作,能使A变到B.可以直接进行BFS搜索 #include<bits/stdc++.h& ...

  8. hdu 5901 count prime & code vs 3223 素数密度

    hdu5901题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5901 code vs 3223题目链接:http://codevs.cn/problem ...

  9. 最小生成树 prime zoj1586

    题意:在n个星球,每2个星球之间的联通需要依靠一个网络适配器,每个星球喜欢的网络适配器的价钱不同,先给你一个n,然后n个数,代表第i个星球喜爱的网络适配器的价钱,然后给出一个矩阵M[i][j]代表第i ...

  10. 最小生成树 prime poj1258

    题意:给你一个矩阵M[i][j]表示i到j的距离 求最小生成树 思路:裸最小生成树 prime就可以了 最小生成树专题 AC代码: #include "iostream" #inc ...

随机推荐

  1. 表格table的宽度问题

    首先注意table的一个样式 table { table-layout:fixed; } table-layout有以下取值: automatic 默认.列宽度由单元格内容设定 fixed 列宽由表格 ...

  2. day34 前端基础之JavaScript

    day34 前端基础之JavaScript ECMAScript 6 尽管 ECMAScript 是一个重要的标准,但它并不是 JavaScript 唯一的部分,当然,也不是唯一被标准化的部分.实际上 ...

  3. postgresql安装部署

    一.下载安装: 1.下载: 官网下载地址:https://www.postgresql.org/download/linux/redhat/ 也可以用这个:https://www.enterprise ...

  4. midi的一些概念,包括一些音乐的概念

    参考:http://www.yueqixuexi.com/jita/20180918205363.html https://blog.csdn.net/meicheng777/article/deta ...

  5. Android数据存取

    Android数据存取 一.SharedPreferencesc存取数据 SharedPreferences是使用键值对的方式来存储数据的,也就是在保存一条数据时,需要给这条数据提供一个对应的键,这样 ...

  6. 如何让Linux 机器CPU使用率变高

    如何让Linux 机器CPU使用率变高 一.实现 1.单行命令搞定 for i in `seq 1 $(cat /proc/cpuinfo |grep "physical id" ...

  7. Spring 与 SpringBoot 的区别

    概述 Spring 与 SpringBoot 有什么区别???梳理一下 Spring 和 SpringBoot 到底有什么区别,从 Spring 和 SpringBoot 两方面入手. Spring ...

  8. [MySQL实战-Mysql基础篇]-mysql的日志

    参考文章: https://www.cnblogs.com/f-ck-need-u/archive/2018/05/08/9010872.html https://dev.mysql.com/doc/ ...

  9. Anaconda+pycharm(jupyter lab)搭建环境

    之前先是安装了pycharm,手动安装了python2.7和3.7版本,在pycharm里面使用alt+/手动下载包.后来想使用jupyter lab,手动下载包太麻烦且有版本管理的文艺,于是打算装A ...

  10. numpy基础教程--浅拷贝和深拷贝

    在numpy中,使用等号(=)直接赋值返回的是一个视图,属于浅拷贝:要完整的拷贝一个numpy.ndarray类型的数据的话,只能调用copy()函数 # coding = utf-8 import ...