题意:求满足条件GCD(N,M) = N XOR M的M的个数

sol:和uva那题挺像的。若gcd(a,b)=a xor b=c,则b=a-c

暴力枚举N的所有约数K,令M=NxorK,再判断gcd(N,M)是不是等于K。

注意枚举约数时传统方法是O(N)的,会完蛋

有个O(sqrt(N))的方法:

注意一个性质:若n%i==0,则有n%(n/i)=0

所以可以这样:

for (int i=1;i*i<=N;i++)

  if (N%i==0)

  {

    //i是约数,N/i也是约数

    balabalabala...

  }

 #include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
using namespace std;
#define LL long long LL M,N;
LL ans[];
int TC=; long long gcd(long long a,long long b){
if(b == )return a;
return gcd(b,a%b);
} int main()
{
while (~scanf("%I64d",&N))
{
vector<LL> ans;
TC++;
int num=; //calculate all factors of N
/*
for (int c=1;c<=N-1;c++)
if (N%c==0)
{
M=N-c;
num++;
printf("%d %I64d\n",num,M);
ans[num]=M;
}
*/
/*
LL m=sqrt(N)+0.5;
for (LL i=1; i<m; i++)
if ( !(N%i) )
{
M=N-i;
num++;
ans[num]=M;
}
for (LL i=m; i>1; i--) //Шєn%i==0,дђгаn%(n/i)=0.
if ( !(N%i) )
{
M=N-(N/i);
num++;
ans[num]=M;
}
if (N==2)
{ num++; ans[num]=1; }
*/ for (LL i=;i*i<=N;i++) //若n%i==0,则有n%(n/i)=0
if (N%i==) //i , n/i
{
if(gcd(N,N^i) == i && (N^i) >= && (N^i) <= N)
ans.push_back(N^i);
if(i*i < N && gcd(N,N^(N/i)) == N/i && (N^(N/i)) >= && (N^(N/i)) <= N)
ans.push_back(N^(N/i)); //LL M1=N-i,M2=N-(N/i);
//if (gcd(N,M1)==N^M1) ans.push_back(M1);
//if (M1!=M2 && gcd(N,M2)=和=N^M2) ans.push_back(M2);
} sort(ans.begin(),ans.end());
printf("Case #%d:\n",TC);
printf("%d\n",ans.size());
for (int i=;i<ans.size();i++)
{
if (i>) printf(" ");
printf("%I64d",ans[i]);
}
printf("\n");
} return ;
}

hdu5175 gcd 求约数的更多相关文章

  1. GCD求最大公约数

    求最大公约数哪个强,果断GCD,非递归版本和递归版本如下: #include<iostream> using namespace std; int gcd(int a, int b){ / ...

  2. HDU 5211 筛法求约数

    给出n个数a1,a2...an,定义函数 f[i]=j,(i<j),表示aj mod ai=0 的最小j,其中j大于i,如果不存在这样的数,则f[i]=0 求n个数所有f[]值的和 先用筛法o( ...

  3. 礼物(中国剩余定理+拓展gcd求逆元+分治=拓展Lucus)

    礼物 题意: 求\[C(n,m)\ \%\ p\] \(n,m,p\le 10^9\),且若\(p=\prod_{i=1}^{k}{p_i}^{c_i}\),则\(\forall i\in [1..k ...

  4. 辗转相除法(GCD)求左旋转字符串

    本文写于2017-01-18,从老账号迁移到本账号,原文地址:https://www.cnblogs.com/huangweiyang/p/6297874.html 今天在牛客网上做了一道题,题意就是 ...

  5. [CodeForces-1036E] Covered Points 暴力 GCD 求交点

    题意: 在二维平面上给出n条不共线的线段,问这些线段总共覆盖到了多少个整数点 解法: 用GCD可求得一条线段覆盖了多少整数点,然后暴力枚举线段,求交点,对于相应的 整数交点,结果-1即可 #inclu ...

  6. 拓展gcd求不定方程通解

    void gcd(LL a,LL b,LL &d,LL &x,LL &y){ ){d=a;x=;y=;return;} gcd(b,a%b,d,x,y); int t=x; x ...

  7. 【算法基础】欧几里得gcd求最大公约数

    package Basic; import java.util.Scanner; public class Gcd { public static void main(String[] args) { ...

  8. SPOJ:NO GCD (求集合&秒啊)

    You are given N(1<=N<=100000) integers. Each integer is square free(meaning it has no divisor ...

  9. NYOJ-476谁是英雄,分解质因子求约数个数!

    谁是英雄 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 十个数学家(编号0-9)乘气球飞行在太平洋上空.当横越赤道时,他们决定庆祝一下这一壮举.于是他们开了一瓶香槟.不 ...

随机推荐

  1. 重构Web Api程序(Api Controller和Entity)

    Insus.NET较习惯做法,是在程序完成之后,抽一些少时间对写好的代码重新审视.比如这些天写的Web Api的程序来说,发现有很多值得重构代码. 开发ASP.NET MVC程序,与数据相关有关联的一 ...

  2. font和lineheight冲突。

    font:14px bold arial; line-height:40px; 这样写font的话line-height不会有效,只要把font拆分写就有效,chrome ie ff下都是.

  3. addShutdownHook的用法

    addShutdownHook作为一个正常关闭Java程序的途径,其实是非常有用的. 有JDK文档可知,当程序正常退出,或者为响应用户中断而终止虚拟机的时候,就会调用里面的线程,来作最后的退出处理. ...

  4. 利用Canvas进行绘制XY坐标系

    首先来一发图 绘制XY的坐标主要是利用Canvas setLeft和setBottom功能(Canvas内置坐标的功能) 1.首先WPF中的坐标系都是从左到右,从上到下的 即左上角位置(0,0)点,所 ...

  5. sql基本命令

    --------------------------------------------------------SQL基本命令开始----------------------------------- ...

  6. [转]Linux系统中‘dmesg’命令处理故障和收集系统信息的7种用法

    'dmesg'命令显示linux内核的环形缓冲区信息,我们可以从中获得诸如系统架构.cpu.挂载的硬件,RAM等多个运行级别的大量的系统信息.当计算机启动时,系统内核(操作系统的核心部分)将会被加载到 ...

  7. HTML5+JS 《五子飞》游戏实现(三)页面和棋盘棋子

    前面两节,我们已经对<五子飞>有个初步的认识,对走棋路线也有了基本的了解,现在里沃特继续跟大家分享HTML页面,另外把棋盘棋子也画出来. 演示地址:http://www.lyout.com ...

  8. 准标识符(Quasi-dientifier, QI)

    Quasi-identifier From Wikipedia, the free encyclopedia Quasi-identifiers are pieces of information t ...

  9. Cadence Allegro元件封装制作流程

    (本文为转载,原文出处不详) 引言 一个元件封装的制作过程如下图所示.简单来说,首先用户需要制作自己的焊盘库Pads,包括普通焊盘形状Shape Symbol和花焊盘形状Flash Symbol:然后 ...

  10. C语言输入输出整数

    scanf("%llu", &x); printf("%llu\n", x); scanf("%u", &x); print ...