【JZOJ4714】公约数【数论,数学】

xiaoxiao2025-04-18  9

题目大意:

题目链接:https://jzoj.net/senior/#main/show/4714 题目图片: http://wx4.sinaimg.cn/mw690/0060lm7Tly1fwp1egqfr7j30j70gkglv.jpg 给定一个正整数 n n n,求在 [ 1 , n ] [1,n] [1,n]的范围内,有多少个无序数对 ( a , b ) (a,b) (a,b)满足 g c d ( a , b ) = a   x o r   b gcd(a,b)=a\ xor\ b gcd(a,b)=a xor b


思路:

c = g c d ( a , b ) = a   x o r   b c=gcd(a,b)=a\ xor\ b c=gcd(a,b)=a xor b,证明满足 g c d ( a , b ) = a   x o r   b gcd(a,b)=a\ xor\ b gcd(a,b)=a xor b必有 a − c = a   x o r   c a−c=a\ xor\ c ac=a xor c 证 明 过 程 证明过程 还是比较好理解的。同学写了证明过程↑,可以直接进去。 所以就枚举 c c c,由于 c c c a a a的一个因数( g c d ( a , b ) = c gcd(a,b)=c gcd(a,b)=c中可以得出),所以再枚举 c k = a ck=a ck=a然后判断即可。


代码:

#include <cstdio> #define R register using namespace std; int n,sum; int main() { scanf("%d",&n); for (R int c=1;c<=n;c++) for (R int i=2;c*i<=n;i++) { int a=c*i; if (a-c==(a^c)) sum++; } printf("%d\n",sum); return 0; }
转载请注明原文地址: https://www.6miu.com/read-5028520.html

最新回复(0)