hdu 5175 Misaki's Kiss again

Misaki's Kiss again

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 727    Accepted Submission(s): 179


Problem Description
After the Ferries Wheel, many friends hope to receive the Misaki's kiss again,so Misaki numbers them  1,2...N1,N,if someone's number is M and satisfied the  GCD(N,M) equals to  N XOR  M,he will be kissed again.

Please help Misaki to find all  M(1<=M<=N).

Note that:
GCD(a,b) means the greatest common divisor of  a and  b.
A XOR  B means  A exclusive or  B
 

Input
There are multiple test cases. 

For each testcase, contains a integets  N(0<N<=1010)
 

Output
For each test case, 
first line output Case #X:,
second line output  k means the number of friends will get a kiss.
third line contains  k number mean the friends' number, sort them in ascending and separated by a space between two numbers
 

Sample Input

3 5 15
 

Sample Output

Case #1: 1 2 Case #2: 1 4 Case #3: 3 10 12 14
Hint
In the third sample, gcd(15,10)=5 and (15 xor 10)=5, gcd(15,12)=3 and (15 xor 12)=3,gcd(15,14)=1 and (15 xor 14)=1
 

题意  求满足gcd(m,n)=n xor m的m的数量和值

枚举 N的约数k  另m=n xor k  看k的值是否等于 gcd(n,m)

证明:令M = N xor K,原式:gcd(N,N xor K) = N xor (N xor K) = K,由此我们可以发现K是N的约数,找到所有N的约数,判断是不是满足那个等式即可

#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define MEM(a,x) memset(a,x,sizeof a)
#define eps 1e-8
#define MOD 10009
#define MAXN 10010
#define INF 0x7fffffff
#define ll __int64
#define bug cout<<"here"<





你可能感兴趣的:(枚举)