hdu 1796 How many integers can you find

容斥原理!!

这题首先要去掉=0和>=n的值,然后再使用容斥原理解决

我用的是数组做的……

 

 1 #include<iostream>

 2 #include<stdio.h>

 3 #include<algorithm>

 4 #include<iomanip>

 5 #include<cmath>

 6 #include<string>

 7 #include<vector>

 8 #define ll __int64

 9 using namespace std;

10 int an[11],n,m,num,a[11];

11 ll gcd(int a,int b)

12 {

13     int t;

14     if(a<b) swap(a,b);

15     while(b)

16     {

17         t=a;

18         a=b;

19         b=t%b;

20     }

21     return a;

22 }

23 ll lcm(int a,int b)

24 {

25     return a/gcd(a,b)*b;

26 }

27 ll cal()

28 {

29     ll quene[10000],sum=0;

30     int t=0,k,i,j;

31     quene[t++]=-1;

32     for(i=0;i<num;i++)

33     {

34         k=t;

35         for(j=0;j<k;j++)

36         {

37             if(quene[j]<0)

38                 quene[t++]=lcm(-quene[j],an[i]);

39             else quene[t++]=(-1)*lcm(quene[j],an[i]);

40         }

41     }

42     for(i=1;i<t;i++)

43         sum+=(n-1)/quene[i];

44     return sum;

45 }

46 int main()

47 {

48     int i,j,t,k;

49     while(cin>>n>>m)

50     {

51         num=0;k=0;

52         for(i=0;i<m;i++)

53         {

54             cin>>t;

55             if(t>0&&t<n)  an[num++]=t;

56         }

57         printf("%I64d\n",cal());

58     }

59     return 0;

60 }
View Code

 

 

你可能感兴趣的:(Integer)