zoukankan      html  css  js  c++  java
  • 容斥定理!

    练习题目:HDU 4135;http://acm.hdu.edu.cn/showproblem.php?pid=4135

    程序: #include<iostream>

    #include<string.h>
    #include<algorithm>
    #include<vector>
    using namespace std;
    vector <int>vt;//第一次用栈!很好用
    long long n,a,b,ret;
    long long que[10000];

    void fx()
    {
       vt.clear();
       ret=n;
       for (int i=2;i*i<=n;i++)
       {
           if (ret%i==0)
           {
               vt.push_back(i);
               while (ret%i==0)
               {
                   ret/=i;
               }
           }
       }
       if (ret>1) vt.push_back(ret);
    }


    long long Ans(long long n,long long x)//核心:其实我以为要用麻烦的DFS,队列解决!而且很好弄
    {
            int  num=0;
            que[num++]=1;
            for (int i=0;i<vt.size();i++)
            {
            int ep=vt[i];
            int k=num;
            for (int j=0;j<k;j++)
            que[num++]=que[j]*ep*(-1);
        }
        long long sum=0;
        for (int i=0;i<num;i++)
        sum+=x/que[i];
        return sum;
    }

    int main()
    {
        int cas;
        cin>>cas;
        for (int i=1;i<=cas;i++)
        {
            cin>>a>>b>>n;
            cout<<"Case #"<<i<<"";
            fx();
            long long ans=Ans(n,b)-Ans(n,a-1);//输出顺序,其实是(N-ans(n,b))-(N-ANS(N,A-1))
            cout<<ans<<endl;
        }
        return 0;
    }

       2013年11月29日 

     
    随性Code
  • 相关阅读:
    树莓派学习记录
    ESP8266
    城轨列控系统
    VMware+CentOS7学习记录
    眼镜
    调试蜂鸣器驱动电路
    假期作业进度6
    假期作业进度5
    假期作业进度4
    假期作业进度3
  • 原文地址:https://www.cnblogs.com/forgot93/p/3450404.html
Copyright © 2011-2022 走看看