题意:求满足条件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. QT 记事本小程序

    //mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <Q ...

  2. SQL Server存储过程中使用表值作为输入参数示例

    这篇文章主要介绍了SQL Server存储过程中使用表值作为输入参数示例,使用表值参数,可以不必创建临时表或许多参数,即可向 Transact-SQL 语句或例程(如存储过程或函数)发送多行数据,这样 ...

  3. 数据库mark

    LOAD DATA INFILE 'I:\QQpwd\\1.txt' IGNORE INTO TABLE sgk.top1 FIELDS TERMINATED BY '----' OPTIONALLY ...

  4. perl 下使用非root用户安装模块

    perl下安装模块可以使用cpan命令,但是通常我们不具有root用户权限,所以只能以sudo方式安装模块. 例如需要安装Net::SCP::Expect模块, 执行cpan Net::SCP::Ex ...

  5. Oracle XE http端口8080的修改

    Oracle Express Edition(XE)默认的http端口是8080,这跟JBoss/Tomcat的默认端口相同,导致Jboss启动冲突. 修改办法: 1. 以dba身份登录XE 2. 执 ...

  6. .NET C#微信公众号开发远程断点调试(本地远程调试生产环境代码)

    最近在做微信公众号开发,由于之前没有接触过,突然发现调试不方便,不方便进行断点跟踪调试.因为微信那边绑定的服务器地址必须是公网地址,但是还是想进行断点调试(毕竟这样太方便了,程序有Bug,一步步断点跟 ...

  7. MVVM小记

    这篇小记源自于codeproject上的一篇文章 http://www.codeproject.com/Articles/100175/Model-View-ViewModel-MVVM-Explai ...

  8. Verilog代码规范I

    Verilog代码规范I "规范"这问题 "规范"这个富含专业气息的词汇(个人感觉),其实规范这种东西,就是大家都约定熟成的东西,一旦你不遵守这个东西,专业人士 ...

  9. [BZOJ 1260][CQOI2007]染色(DP)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1260 分析: f[i][j]表示i~j刷成s[i]~s[j]这个样子需要的最小次数 则 ...

  10. SQL复杂查询和视图(2)

    分组查询 SQL可以将检索到的元组按某一条件进行分组,分组是属性值相同的为一组 求每个学生的平均成绩 SELECT sn,AVG(score)FROM scGROUP BY sn 先按sn进行分组,即 ...