找质因数..打素数表..DFS解容斥问题...

原创 2012年03月21日 20:44:22

Co-prime

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

     这题提醒的我就是在求一个数的质因数时..可以先将质数表打出来...10^9内的..质数表只需要扫到32000多(因为32000*32000>100000000了)...最终是打出3000多个质数..但要注意的是..有可能给的数就是质数..或者说有大于32000的质因数..但这样的质因数绝对最多一个...so...见程序.....


Program: 

#include<iostream>
#define ll long long
using namespace std;
ll a,b,n,t,T,x,s[31],M,N,ans,p;
int Prime[40000];
void DFS(ll i,ll w,ll k)
{
      for (;i<=n;i++)
      {
            p=w*s[i];
            M+=k*(N/p);
            DFS(i+1,p,-k);
      }
      return;
}
int main()
{
      freopen("input.txt","r",stdin);
      freopen("output.txt","w",stdout);
      scanf("%I64d",&T);
      ll i,j,num=0;
      for (i=2;i<=33000;i++)
      {
            for (j=2;j*j<=i;j++)
               if (i%j==0) goto A;
            Prime[++num]=i;
            A: ;
      }
      for (t=1;t<=T;t++)
      {
            scanf("%I64d%I64d%I64d",&a,&b,&x);
            n=0;
            for (i=1;i<=num;i++) 
            if (x%Prime[i]==0)
            {
                   while (x%Prime[i]==0) x/=Prime[i];
                   s[++n]=Prime[i];
                   if (x==1) break;
            }
            if (x!=1) s[++n]=x;  // 处理超过32000的质因数
            a--;
            M=0; N=a;
            DFS(1,1,1);
            M=a-M;
            ans=M;
            M=0; N=b;
            DFS(1,1,1);
            M=b-M;
            ans=M-ans;
            printf("Case #%I64d: %I64d\n",t,ans);      
      }
      return 0;
}


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

容斥原理的几个问题总结

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

吉哥系列故事——礼尚往来(简单容斥问题)

链接:http://acm.hdu.edu.cn/showproblem.php?pid=4535 Description  吉哥还是那个吉哥   那个江湖人称“叽叽哥”的基哥     ...
  • hellohelloC
  • hellohelloC
  • 2016年05月28日 12:09
  • 270

BZOJ 2393 浅谈题目性质深度挖掘及容斥原理DFS写法

(助威TEAM WE) 世界真的很大 容斥原理这种东西~~虽然只是刷了几道水题而已但感觉还是要总结一波 数论的复习差不多就要结束了? 希望不要耽误太多时间吧~还要留时间给DP的第二轮复习 最...
  • BerryKanry
  • BerryKanry
  • 2017年10月22日 20:10
  • 160

容斥的原理及广义应用

容斥原理想起容斥原理,大家都不陌生。 相信很多地方都会举这样类似一个最简单的例子让大家理解容斥: 现在赛场上有n个人,都参加过WC、CTSC和APIO。 拿过至少一个比赛的金牌的有多少人? 我...
  • WerKeyTom_FTD
  • WerKeyTom_FTD
  • 2017年07月07日 16:30
  • 617

容斥原理(模板)

模板:递归版(好理解) 其实打表是更慢的而且很可能根本打不下,因为打表实际上是依次枚举所有的方案,如果被除数较多,就无法枚举方案数了 //容斥原理,结果存在sub中 long long sub...
  • qq_30241305
  • qq_30241305
  • 2016年09月22日 11:12
  • 372

容斥原理专题二

第一题 poj-1091 分析:看完题目,我们首先猜测要使得跳蚤最后可以左跳一个单位,那么这N+1个数字一定满足gcd(x1,x2,…,xn,M)==1,不然的话一定不能躲开他们之间的公共因子。转换一...
  • shengtao96
  • shengtao96
  • 2016年09月12日 21:22
  • 536

【HDU】5155 Harry And Magic Box 【容斥原理】

传送门:【HDU】5155 Harry And Magic Box 题目分析:很容易发现容斥的方法,首先我们不管是否每一列都有星星,但是一定保证每一行至少一个星星,因此我们得到了一个方法,这...
  • u013368721
  • u013368721
  • 2015年01月03日 22:02
  • 1261

容斥原理(模板+例题)

网上找来方便自己看,理解。 容斥原理:在计数时,必须注意无一重复,无一遗漏。为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象...
  • dl962454
  • dl962454
  • 2017年08月05日 22:07
  • 235

HDOJ-1796 DFS解容斥问题模板题..

思路很简单...加上一个一个的..再减去两两重复的..再加上三三多剪的..再减去四四多加的..直道做完...为了实现这个过程..用DFS..通过当前的是奇数个数还是偶数个数来判断当前是加还是剪..由于...
  • kk303
  • kk303
  • 2012年03月21日 14:06
  • 844

ACM 容斥原理

VJ 点击打开链接 参考 点击打开链接  非常好的译文:点击打开链接 容斥原理的想法就是求多个集合的并集.所以要先设计好集合. 组合数学问题中,正面解决会困难,常用方法是正难则反,使用容斥原理求反向...
  • gg_gogoing
  • gg_gogoing
  • 2015年02月08日 08:57
  • 3670
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:找质因数..打素数表..DFS解容斥问题...
举报原因:
原因补充:

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