zoukankan      html  css  js  c++  java
  • hdu 4135 a到b的范围中多少数与n互质(容斥)

                               Co-prime

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4135

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

    题解:先求出n的所有质因数,因为n最大为1e9所以最多10个

    利用二进制来模拟是否乘上某个质因数,例如有个n为2*3*5=30

    1-x中共有ans个数与其互质  ans=-x/2-x/3-x/5+x/6+x/10+x/15-x/30

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    using namespace std;
    long long fa[20];
    long long factor(long long x)
    {
        long long num=0;
        for(long long i=2;i*i<=x;i++)
        {
             if(x%i==0)
             {
                 fa[num++]=i;
                 while(x%i==0)x/=i;
             }
        }
        if(x>1)fa[num++]=x;
        return num;
    }
    long long un(long long  x,long long num)
    {
        long long res=0;
        for(long long i=0;i<(1<<num);i++)
        {
            long long g=1,k=0;
            for(long long j=0;j<num;j++)
            {
                if(i&(1<<j))
                  g*=fa[j],k++;
            }
            if(k%2)
                res-=x/g;
            else
                res+=x/g;
        }
        return res;
    }
    int main()
    {
        long long T,n,i=1;
        long long a,b,ans;
        scanf("%I64d",&T);
        while(T--)
        {
            scanf("%I64d %I64d %I64d",&a,&b,&n);
            long long num=factor(n);
            ans=un(b,num)-un(a-1,num);
            printf("Case #%I64d: ",i++);
            printf("%I64d
    ",ans);
        }
    	return 0;
    }
    

      

  • 相关阅读:
    HDOJ1213 并查集
    poj 3070 Fibonacci
    csu 1102 Palindrome
    C#格式化数值结果表
    正则表达式基础知识
    C#验证Email是否真正存在
    【翻译】Scott Mitchell的ASP.NET2.0数据教程中文版索引
    分块下载,测试文件 3.8GB
    asp.net的TextBox回车触发事件
    Cookie加密
  • 原文地址:https://www.cnblogs.com/carcar/p/9058317.html
Copyright © 2011-2022 走看看