zoukankan      html  css  js  c++  java
  • hdu 4135 Co-prime 容斥原理

    简单的容斥原理!!!

    代码如下:

     1 #include<iostream>
     2 #include<stdio.h>
     3 #include<cstring>
     4 #include<algorithm>
     5 #define I(x) scanf("%d",&x)
     6 #define ll __int64
     7 #define MAX 500000
     8 using namespace std;
     9 int prime[MAX],cnt,e[MAX],num;
    10 ll a,b,res1,res2;
    11 bool f[MAX];
    12 void init()
    13 {
    14     cnt=0;
    15     memset(f,0,sizeof(f));
    16     for(int i=2;i<MAX;i++){
    17         if(!f[i]) prime[cnt++]=i;
    18         for(int j=0;j<cnt&&i*prime[j]<MAX;j++){
    19             f[i*prime[j]]=1;
    20             if(i%prime[j]==0) break;
    21         }
    22     }
    23 }
    24 void fac(ll n)
    25 {
    26     num=0;
    27     for(int i=0;i<cnt&&prime[i]*prime[i]<=n;i++){
    28         if(n%prime[i]==0){
    29             e[num++]=prime[i];
    30             n/=prime[i];
    31             while(n%prime[i]==0) n/=prime[i];
    32         }
    33     }
    34     if(n>1) e[num++]=n;
    35 }
    36 void dfs(ll sum,int d,int c,ll &ans,ll n)
    37 {
    38     if(sum>n) return;
    39     ans-=(ll)(n/sum*c);
    40     for(int i=d+1;i<num;i++)
    41         dfs((ll)sum*e[i],i,-c,ans,n);
    42 }
    43 int main(){
    44     int t,ca=0;
    45     ll n;
    46     init();
    47     I(t);
    48     while(t--){
    49         scanf("%I64d%I64d%I64d",&a,&b,&n);
    50         fac(n);
    51         res1=a-1;
    52         res2=b;
    53         for(int i=0;i<num;i++){
    54             dfs(e[i],i,1,res1,a-1);
    55             dfs(e[i],i,1,res2,b);
    56         }
    57         printf("Case #%d: %I64d
    ",++ca,res2-res1);
    58     }
    59     return 0;
    60 }
    View Code

  • 相关阅读:
    Linux菜鸟起飞之路【三】Linux常用命令
    Linux菜鸟起飞之路【二】Linux基本常识
    Linux菜鸟起飞之路【一】基本知识与Linux的安装
    交换机和路由器区别
    netdom join more ou
    keepalive.conf配置模板
    mysql7.7.22 Gtid主从搭建
    python 列表处理
    python openpyxl模块使用
    mysql5.7
  • 原文地址:https://www.cnblogs.com/xin-hua/p/3294507.html
Copyright © 2011-2022 走看看