HDU 2841 Visible Trees(数论)

2015-01-27 06:15:03 · 作者: · 浏览: 11

题目大意:给你一个m*n的方格,方格从(1,1)开始。每个点上有一棵树,然后让你从(0,0)点向下看,问你能看见几颗树。

解题思路:如果你的视线被后面的树和挡住的话以后在这条线上的树你是都看不见的啊。挡住的话就是这个小的方格内对角线的连线过顶点,如图:

\

建设A为(0,0)如果B能遮挡住C,那么B与C组成的矩形中nx, mx是不互质的。<??http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+y/nS1Hi00zG/qsq8w7a+2W7I57n7bdbQxLPSu8/u0+t4u6XWysTHw7S+zbvh09DSu7j2JiMyNjY4NDvX08/Uyr6z9sC0o6zL+dLU1eLA79Do0qrV0rXEyscxLW7W0NPrw7a+2bXEeLul1sq1xLj2yv2ho9XiwO+1xLuwztLDx7/J0tTTw7W9t9a94tbK0vLK/aOsyLu689PD17TMrNG5y/W9+NDQyN2z4qOsx/Oz9m7W0NPreLul1sq1xLj2yv2hozwvcD4KPHA+UFOjus7StPrC68Dvw+bQtLXEbqOsbdPr1eLA773iys21xG6jrG3Kx7e0uf3AtLXEoaM8L3A+CjxwPjxicj4KPC9wPgo8cD48L3A+CjxoMT4KVmlzaWJsZSBUcmVlczwvaDE+CjxzdHJvbmc+VGltZSBMaW1pdDogMjAwMC8xMDAwIE1TIChKYXZhL090aGVycykgICAgTWVtb3J5IExpbWl0OiAzMjc2OC8zMjc2OCBLIChKYXZhL090aGVycyk8YnI+ClRvdGFsIFN1Ym1pc3Npb24ocyk6IDE1NTYgICAgQWNjZXB0ZWQgU3VibWlzc2lvbihzKTogNjQ1PGJyPgo8L3N0cm9uZz48YnI+Cjxicj4KClByb2JsZW0gRGVzY3JpcHRpb24KClRoZXJlIGFyZSBtYW55IHRyZWVzIGZvcm1pbmcgYSBtICogbiBncmlkLCB0aGUgZ3JpZCBzdGFydHMgZnJvbSAoMSwxKS4gRmFybWVyIFNoZXJsb2NrIGlzIHN0YW5kaW5nIGF0ICgwLDApIHBvaW50LiBIZSB3b25kZXJzIGhvdyBtYW55IHRyZWVzIGhlIGNhbiBzZWUuPGJyPgo8YnI+CklmIHR3byB0cmVlcyBhbmQgU2hlcmxvY2sgYXJlIGluIG9uZSBsaW5lLCBGYXJtZXIgU2hlcmxvY2sgY2FuIG9ubHkgc2VlIHRoZSB0cmVlIG5lYXJlc3QgdG8gaGltLgoKIAo8YnI+CgpJbnB1dAoKVGhlIGZpcnN0IGxpbmUgY29udGFpbnMgb25lIGludGVnZXIgdCwgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIHRlc3QgY2FzZXMuIFRoZW4gdGhlcmUgYXJlIG11bHRpcGxlIHRlc3QgY2FzZXMuIEZvciBlYWNoIHRlc3QgY2FzZSB0aGVyZSBpcyBvbmUgbGluZSBjb250YWluaW5nIHR3byBpbnRlZ2VycyBtIGFuZCBuKDEgodwgbSwgbiCh3CAxMDAwMDApCgogCjxicj4KCk91dHB1dAoKRm9yIGVhY2ggdGVzdCBjYXNlIG91dHB1dCBvbmUgbGluZSByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgdHJlZXMgRmFybWVyIFNoZXJsb2NrIGNhbiBzZWUuCgogCjxicj4KClNhbXBsZSBJbnB1dAoKPHByZSBjbGFzcz0="brush:java;">2 1 1 2 3
Sample Output

1
5
#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         #include 
        
          #include 
         
           #include 
          
            #include 
           
             #include 
             #include 
             
               #define eps 1e-8 #define M 1000100 #define LL long long //#define LL long long #define INF 0x3f3f3f #define PI 3.1415926535898 #define mod 1000000007 const int maxn = 100010; using namespace std; struct node { int num[8]; int ans; } p[maxn]; int f[maxn]; int k[maxn]; int t; void prime() { t = 0; memset(f, 0, sizeof(f)); for(int i = 2; i <= maxn-5; i++) { if(!f[i]) k[t++] = i; for(int j = 0; j < t; j++) { if(i*k[j] > maxn-5) break; f[i*k[j]] = true; if(i%k[j] == 0) break; } } } LL judge(int n, int x) { LL cnt = 0; for(int i = 0; i < (1<<(p[x].ans)); i++) { int ss = 0; int sx = 1; for(int j = 0; j < p[x].ans; j++) { if((1<
              
               >T; while(T--) { scanf("%d %d",&n, &m); LL sum = n; for(int i = 2; i <= m; i++) sum += judge(n, i); cout<