HDOJ 4135 Co-prime 容斥原理

2015-07-20 17:08:11 ? 作者: ? 浏览: 4

?

求得n的因数后,简单容斥

?

Co-prime

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1798 Accepted Submission(s): 685



Problem 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 <= 10 15) and (1 <=N <= 10 9).
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

HintIn the first test case, the five integers in range [1,10] which are relatively prime to 2 are {1,3,5,7,9}.  


?

?

/* ***********************************************
Author        :CKboss
Created Time  :2015年03月27日 星期五 17时52分24秒
File Name     :HDOJ4135.cpp
************************************************ */

#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         #include 
        
          #include 
         
           #include 
          
            #include 
           
             #include
             using namespace std; typedef long long int LL; LL A,B,N; vector
             
               pr; void getPr() { LL TN=N,now=2; pr.clear(); while(TN!=1) { if(TN%now==0) { pr.push_back(now); while(TN%now==0) TN/=now; } now++; if(now*now>TN) break; } if(TN!=1) pr.push_back(TN); } LL RET,RET1,RET2; void dfs(int x,LL n,int mark) { for(int i=x,sz=pr.size();i
              
               >T_T; while(T_T--) { cin>>A>>B>>N; getPr(); A--; RET=A; dfs(0,A,-1); RET1=RET; RET=B; dfs(0,B,-1); RET2=RET; cout<<"Case #"<
               
              
             
           
          
         
        
       
      
     
    
   
  
-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: