S a m p l e Sample Sample I n p u t Input Input#1
12
S a m p l e Sample Sample I n p u t Input Input#2
123456
S a m p l e Sample Sample O u t p u t Output Output#1
8
S a m p l e Sample Sample O u t p u t Output Output#2
214394
H i n t Hint Hint
样例1中共有八对,分别是: {2,3},{4,5},{4,6},{6,7},{8,9},{8,10},{8,12},{10,11}
T r a i n o f T h o u g h t Train\ of\ Thought Train of Thought
求在
n
n
n里有多少对
(
a
,
b
)
(a,\ b)
(a, b)
满足
g
c
d
(
a
,
b
)
=
a
gcd(a,\ b)\ =\ a
gcd(a, b) = a ^
b
\ b
b
其实就是证明若
g
c
d
(
a
,
b
)
=
a
gcd(a,\ b)\ =\ a
gcd(a, b) = a ^
b
\ b
b
则
g
c
d
(
a
,
b
)
=
a
−
b
(
a
≥
b
)
gcd(a,\ b)=a\ -\ b\ (a\ ≥\ b)
gcd(a, b)=a − b (a ≥ b)
这里有证明
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#define rr register
using namespace std;
int n, Ans;
int gcd(int x, int y)
{return (y)?gcd(y, x % y) : x;}
int main()
{
scanf("%d", &n);
for(int i = 1; i <= n; ++i)
for(int j = i * 2; j <= n; j += i)
if((j - i) == (j ^ i))Ans++;
printf("%d", Ans);
return 0;
}