题意:

给一个数N。

如果GCD(N,M) = N XOR M,则称M是一个kiss       1<=M<=N

问总共有多少个kiss。并且列出所有的值。

思路:

思路一:枚举M。有大量的GCD(N,M)值相等。但是N XOR M=X。当X是定值是,M一定只有一个。所以这个方法明显有大量重复。

    发现知道GCD(N,M)的值,可直接求出M。搞定。

令gcd(n,m)=d,可知道d是n的约数

有d=(n xor m)=(m xor n),所以m=(d xor n)。

可发现gcd(n,(d xor n))=d。

*注意:gcd(a,b) 当a或b为零时,gcd(a,b)的值为1。这个要单独判断。

       还有一个(d xor n)有可能大于n。这个也要单独判断。

代码:

ll N;

ll gcd(ll a,ll b){
if(b==0) return a;
return gcd(b,a%b);
} int T = 0;
ll ans[100005];
int kissNum; int main(){ while(scanf("%I64d",&N)!=EOF){ kissNum = 0; for(ll i=1;i*i<=N;++i){
if(N%i==0){
ll x = N^i;
if(x>0 && x<=N && gcd(N,x)==i){
ans[++kissNum] = x;
}
ll t = N/i;
if(t!=i){
ll xx = N^t;
if(xx>0 && xx<=N && gcd(N,xx)==t){
ans[++kissNum] = xx;
}
}
}
} printf("Case #%d:\n%d\n",++T,kissNum);
if(kissNum>0){
sort(ans+1,ans+1+kissNum);
printf("%I64d",ans[1]);
rep(i,2,kissNum) printf(" %I64d",ans[i]);
}
cout<<endl;
} return 0;
}

最新文章

  1. 安装MySQL5.7
  2. OceanBase RPC机制简要说明
  3. scala模式匹配
  4. T4 assembly
  5. GNU C/C++ __attributes__ GCC中的弱符号与强符号
  6. Fragment inner class should be static
  7. 实现一个基于FTP协议的程序——文件上传下载器(十三)
  8. keepalived+mysql双主复制高可用方案
  9. 每天一个linux命令(47)--scp命令
  10. java学习笔记随记
  11. 《跟我学IDEA》二、配置maven、git、tomcat
  12. Windows实用命令
  13. 记一次mongodb聚合查询
  14. OpenCV尝试
  15. openSUSE Leap 15.0 Adobe Flash Player 安装说明
  16. 使用flask_socketio实现客户端间即时通信
  17. [MySQL]InnoDB引擎的行锁和表锁
  18. PythonStudy——函数的分类 Classification of functions
  19. BZOJ 4004 [JLOI2015]装备购买 | 线性基
  20. python面向对象 : 反射和内置方法

热门文章

  1. python 打字小游戏
  2. PHP中国际化的字符串比较对象
  3. Jenkins操作手册 - 巨详细,一篇足矣!
  4. Java基础系列(14)- JavaDoc生成文档
  5. YbtOJ#482-爬上山顶【凸壳,链表】
  6. P5369-[PKUSC2018]最大前缀和【状压dp】
  7. bootstrap inputfile 使用-上传,回显
  8. (一):细说贝叶斯滤波:Bayes filters
  9. Shiro 550反序列化漏洞分析
  10. 【k8s】使用k8s部署一个简单的nginx服务