hdu 5175 亦或运算和gcd
来源:互联网 发布:java 网络编程框架 编辑:程序博客网 时间:2024/05/18 00:31
gcd ( n ,m ) == n^m
0<m<=n,设gcd(n,m)==d;
n^m == d => n^d = m
if ( 0 < n^d <=n ) gcd ( n , d^n ) == d =>gcd(n,m)==n^m
所以我们可以sqrt(n)的枚举n的约数然后根据公式判断即可
#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#define MAX 100009using namespace std;typedef long long LL;LL ans[MAX];LL n;int cnt = 1;LL gcd ( LL a , LL b ){ return b==0?a:gcd(b,a%b);}void solve ( ){ cnt = 1; for ( LL i = 1 ; i*i<= n ; i++ ) { if ( n%i ) continue; LL x = n^i; if ( x > 0 && x <= n && gcd ( n, x ) == i ) ans[cnt++] = x; if ( n/i == i ) continue; if ( i == 1 ) continue; x = n^(n/i); if ( x > 0 && x <= n && gcd ( n , x ) == n/i ) ans[cnt++] = x; }}int main ( ){ int c = 1; while ( ~scanf ( "%lld" , &n ) ) { solve ( ); printf ( "Case #%d:\n" , c++ ); sort ( ans+1 , ans + cnt ); cnt--; printf ( "%d\n" , cnt ); for ( int i = 1 ; i < cnt ; i++ ) printf ( "%lld " , ans[i] ); if ( cnt == 0 ) puts ( "" ); else printf ( "%lld\n" ,ans[cnt] ); }}
0 0
- hdu 5175 亦或运算和gcd
- hdu 4768 异或运算
- UVA 12716 GCD XOR (数论 gcd和异或不等式)
- &运算(与运算)和|运算(或运算)
- hdu 6025 gcd+前缀和+后缀和
- GCD and LCM+hdu+利用gcd和lcm的性质
- HDU 1287 破译密码 异或运算
- HDU 5416 异或运算性质 思维
- HDU.2095(异或运算)
- HDU 5344 多个数的和异或-思维-(位运算)
- GCD HDU
- GCD HDU
- GCD HDU
- GCD HDU
- GCD HDU
- GCD HDU
- GCD HDU
- GCD HDU
- Linux 命令
- Linux Per-CPU Data
- 黑马程序员——网络编程
- 日期选择UIDatePicker相关
- 伴,就是一人一半,凑在一起才完整
- hdu 5175 亦或运算和gcd
- Mongo启动与重启
- 努力脫絲 記下腳印
- 浅谈Objective-C编译器指令
- 1019. General Palindromic Number
- UISlider使用总结
- UIPickerView用法
- 3DS MAX重命名命令为物体轻松批量命名
- JVM基础知识