POJ-2773 2分夹逼+DFS解容斥..

原创 2012年03月21日 14:19:36

      有了DFS解容斥问题的思路..这题不难想...若一个数x与所给的m互质..则说明x与h的GCD==1...将m因式分解,对于一个确定的上限...可以通过DFS对这些质因数解容斥求出当前上限下有多少个与m不互质的数...从而又能得到当前上限下有多少个与m互质的数...

      想到了这一步..就不难想到2的思路了...通过2分夹逼找到所需的数...并且数据范围m<=100000..在这个范围内因式分解..最多也不会超过6个质因数.{2,3,5,7,11,13}已经超过100000..显然时间上是绝对能秒杀的...

 

Program:

#include<iostream>
#include<string.h>
#include<stdio.h>
#define ll long long
using namespace std;
ll n,m,a[25],ans,p,t,h,l,r,mid; 
void DFS(ll i,ll w,ll k)
{      
       for (;i<=n;i++)
       if (a[i])
       {
             p=a[i]*w;
             h+=k*(mid/p);
             DFS(i+1,p,-k);
       }
       return;
}
int main()
{
       ll i;
       while (cin>>m>>t)
       { 
             n=0;
             for (i=2;i<=m;i++)
             if (m%i==0)
             {
                   while (m%i==0) m/=i;
                   a[++n]=i;
                   if (m==1) break;
             } 
             r=1;
             while (1)
             {
                   mid=r;
                   h=0;
                   DFS(1,1,1);
                   if (mid-h<t) r*=2;
                     else break;
             }
             l=1;
             while (r-l>1)
             {
                   mid=(l+r)/2;
                   h=0;
                   DFS(1,1,1);
                   if (mid-h>=t) r=mid;
                     else l=mid;
             }
             cout<<r<<endl;
       }
       return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

容斥原理【模板】

容斥原理:在计数时,必须注意无一重复,无一遗漏。为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计...
  • u011676797
  • u011676797
  • 2015年05月07日 19:49
  • 1200

容斥原理的应用---求1--r中与n互素数的个数

问题:求1~r中有多少个数与n互素。 对于这个问题由容斥原理,我们有3种写法,其实效率差不多。分别是:dfs,队列数组,位运算。 先说说位运算吧: 用二进制1,0来表示第几个素因...
  • acm_lkl
  • acm_lkl
  • 2014年07月26日 21:03
  • 621

“容斥原理及其应用”笔记

容斥原理 举例 对{1, 2, … , n}的排列i1, i2, … , in计数,其中1不在第1个位置上(即i1 ≠ 1) 已知1在第一个位置上的排列数和{2, 3, … , n}的排列数(n...
  • ArrowLLL
  • ArrowLLL
  • 2016年08月30日 23:43
  • 861

容斥原理的几个问题总结

原文摘自:http://www.cppblog.com/vici/archive/2011/09/05/155103.html
  • u011394362
  • u011394362
  • 2014年11月05日 16:46
  • 1188

容斥原理专题一

抱歉,很久没有更新博客了。这几天集中刷了容斥原理的题目,于是就来写博客巩固下。容斥原理,我想大家在高中都或多或少的学过。虽然知道原理内容,但是用来解题的话,还是有点小障碍的,特别是不知道怎么写代码。如...
  • shengtao96
  • shengtao96
  • 2016年09月08日 21:33
  • 1194

容斥原理的证明

容斥原理的证明 原链接地址 容斥原理(翻译) - vici - C++博客        我们要证明下面的等式:                  其中B代表全部Ai的集合          ...
  • j_d_m_y
  • j_d_m_y
  • 2015年09月01日 13:07
  • 1410

ACM 容斥原理

VJ 点击打开链接 参考 点击打开链接  非常好的译文:点击打开链接 容斥原理的想法就是求多个集合的并集.所以要先设计好集合. 组合数学问题中,正面解决会困难,常用方法是正难则反,使用容斥原理求反向...
  • gg_gogoing
  • gg_gogoing
  • 2015年02月08日 08:57
  • 3538

容斥原理详解

翻译:vici@cust 对容斥原理的描述 容斥原理是一种重要的组合数学方法,可以让你求解任意大小的集合,或者计算复合事件的概率。 描述        容斥原理可以描述如下:  ...
  • usher_ou
  • usher_ou
  • 2017年03月31日 17:27
  • 761

三集合容斥原理问题

三集合容斥原理问题
  • Yaroo
  • Yaroo
  • 2016年10月01日 15:30
  • 3577

【专题总结】容斥原理(持续更新)

差强人意的专题总结。
  • TRiddle
  • TRiddle
  • 2016年07月10日 22:53
  • 1406
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ-2773 2分夹逼+DFS解容斥..
举报原因:
原因补充:

(最多只允许输入30个字)