您的位置:首页 > 其它

【JZOJ4714】公约数

2016-08-19 21:54 323 查看
JZOJ链接

数学题果然思路很重要,我比赛时智商不足,需要再缓一会儿(>﹏<)

显然,当a=b时无解。

假设a>b,注意到Gcd的性质:

①Gcd(a,b)≤a−b(什么瘠薄性质,我比赛没往这方面想)

a xor b≤a−b

那么如果Gcd(a,b)=a xor b

则有Gcd(a,b)=a−b=a xor b

于是我们就有思路了

设一个数k=a-b,枚举k

枚举K同时设A=K*i

因为Gcd(A,A-K)=K,然后我们只需要检测A xor K是否等于A-K即可

时间复杂度O(NlogN)

代码贼短

var
n,i,k,x,ans:longint;
begin
readln(n);
ans:=0;
for i := 1 to n-1 do
begin
k:=2;
while i*k<=n do
begin
x:=i*k;
if x xor i=x-i then inc(ans);
inc(k);
end;
end;
writeln(ans);
end.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数学题 gcd