HDU4135

Co-prime

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

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}.

1.容斥初涉

2.找到交叉情况,即有条理的分析题目

#include<iostream>
#include<cstdio>
#include<string.h>
__int64 a[1200],num;
void gett(__int64 n)
{
    __int64 i;
    num=0;
    for(i=2;i*i<=n;i++)
      {
          if(n%i==0)
          {
              a[num++]=i;
              while(n%i==0)
                 n=n/i;
          }
      }
      if (n>1)
        a[num++]=n;
}
__int64 rc(__int64 m)
{
    __int64 q[10000],i,j,k,t=0,sum=0;
    q[t++]=-1;
    for(i=0;i<num;i++)
    {
        k=t;
        for(j=0;j<k;j++)
           q[t++]=q[j]*a[i]*(-1);
    }
    for(i=1;i<t;i++)
        sum=sum+m/q[i];
    return sum;
}
int main()
{
    __int64 T,x,y,n,sum;
    while (scanf("%I64d",&T)!=EOF)
    {
        for (int j=1;j<=T;j++)
        {
            scanf("%I64d %I64d %I64d",&x,&y,&n);
            gett(n);
            sum=y-rc(y)-(x-1-rc(x-1));
            printf("Case #%d: ",j);
            printf("%I64d\n",sum);
        }
    }
}

时间: 2024-11-05 14:37:38

HDU4135的相关文章

hdu4135 容斥定理

Co-prime Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3587    Accepted Submission(s): 1419 Problem Description Given a number N, you are asked to count the number of integers between A and B

Co-prime(hdu4135)

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

Hdu4135容斥原理

求A到B之间有多少个数能与N互质. 学了下容斥原理的写法, 想将N分解质因数,然后容斥原理,N - 单个质因数倍数个数+2个质因数倍数的个数-3个质因数的个数...... #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<iostream> #include<string> #include<queue> #include<stack> #include<list>

HDU4135 (求a~b内与n互素的数的个数) 容斥原理

掌握了容斥原理后,便会发现,这是一道简单的容斥原理的题. 题目描述:给定A, B, N (1 <= A <= B <= 10^15,1<=N <= 10^9).求[A,B]区间内与N互素的数的个数 步骤: (1)将问题化为求1~B,1~A中与N互素的数的个数的差,当然考虑到A可能与N互素的情况,在实际操作时, 即求1~A时最好改成求1~A-1(包含A-1): (2)求N的质因子(可参考:http://blog.csdn.net/yzj577/article/details/3

HDU4135(容斥原理)

Co-prime Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4090    Accepted Submission(s): 1619 Problem Description Given a number N, you are asked to count the number of integers between A and B

hdu4135 Co-prime(容斥)

题目链接:点这里!!!! 题意: 给你一个区间[A,B](1<=A<=B<=1E15),一个x(x<=1e9).问你[A,B]区间内有多少个数与x互质. 题解: 1.我们先把x的所有质因子找出来,注意x的最多存在1个质因子大于(sqrt(x)),所以我们可以先预处理出[1,sqrt(1e9)]所有的质数. 2.然后我们把x质因子分解并往下除,最后剩下的要么是1,要么就是大于sqrt(x)的质因子. 3.我们得到的质因子最多15个左右,我们直接利用容斥搞就可以了.我们得出的是与x不互

hdu4135(容斥,同色三角形模型)

传送门 解答传送门 ac代码(位运算实现容斥原理): #include<bits/stdc++.h> #define per(i,a,b) for(int i=a;i<=b;i++) using namespace std; typedef long long ll; //#define int long long const ll inf =2333333333333333LL; const double eps=1e-8; int read(){ char ch=getchar();

POJ2407 Relatives(欧拉函数)

题目问有多少个小于n的正整数与n互质. 这个可以用容斥原理来解HDU4135.事实上这道题就是求欧拉函数$φ(n)$. $$φ(n)=n(1-1/p_1)(1-1/p_2)\dots(1-1/p_m)\tag{p为n的质因子}$$ 这个通项公式可以通过容斥原理的解法来验证.那么利用这个通项就能在$O(\sqrt[]n)$下计算出φ(n). 1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 int phi(

容斥原理学习(Hdu 4135,Hdu 1796)

题目链接Hdu4135 Co-prime Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1412    Accepted Submission(s): 531 Problem Description Given a number N, you are asked to count the number of integers betwe