• 【JZOJ 2298】 异或


    题目大意:

    (sum_{i=1}^{n}sum_{j=i}^{n}[gcd(i,j)==ioplus j])

    正文:

    如果你实在想不出正解,你可能会用暴力把一段大范围以内的所有数对以及它们最大公约数(异或值),你会发现 (i-j=k)(i,j) 表示数对里的两个数,(k) 表示其最大公约数)。这是因为两个数 (a,b),和它们的最大公约数 (c) 的关系一定是 (i-jleq c),而和它们的异或值 (d) 则是 (i-jgeq d),如果要最大公因数和异或值相等那么 (i-j=k)

    通过这个式子,我们可以枚举 (k)(i) 得到 (j) 及答案。

    代码:

    int main()
    {
    	scanf("%d", &n);
    	for (register int i = 1; i <= n / 2; i++)
    		for (register int j = 2; i * j <= n; j++)
    		{
    			if(i * (j - 1) == ((i * j) ^ i)) 
    			{
    				ans += 1ll;
    			}
    		}	
    	printf("%lld", ans);
    	return 0;
    }
    
  • 相关阅读:
    强网杯2019 随便注
    HCTF2018 WarmUp
    GKCTF2020 部分MISC
    各类文件头及其十六进制标识
    自动发送邮件
    单一接口多种数据验证
    Yaml 文件的操作
    log 文件的操作
    xml 文件的操作
    ddt 使用操作
  • 原文地址:https://www.cnblogs.com/GJY-JURUO/p/13479611.html
Copyright © 2020-2023  润新知