UVA12716 GCD等于XOR GCD XOR 数论

Posted goto_1600

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVA12716 GCD等于XOR GCD XOR 数论相关的知识,希望对你有一定的参考价值。

link
题意:
给定n求
∑ i = 1 n ∑ j = i n [ i ⊕ j = = gcd ⁡ ( i , j ) ]       n < = 3 e 7 \\sum_{i=1}^n \\sum_{j=i}^{n} {[i\\oplus j==\\gcd(i,j)]} ~~~~~n<=3e7 i=1nj=in[ij==gcd(i,j)]     n<=3e7
思路:
有个结论,就是 i ⊕ j > = i − j > = g c d ( i , j ) i \\oplus j >= i-j>=gcd(i,j) ij>=ij>=gcd(i,j) ,前面很明显,因为 i ⊕ j > = i − j     a n d       i ⊕ j < = i + j i\\oplus j>=i-j ~~~and~~~~~i\\oplus j<=i+j ij>=ij   and     ij<=i+j 这是二进制异或的性质,后面因为
i 和 j 都 能 写 成 g c d ( i , j ) ∗ k 的 形 式 , 那 么 一 定 大 宇 等 于 g c d . 所 以 i ⊕ j = = gcd ⁡ ( i , j ) 就 能 变 成 i ⊕ j = = i − j 同 时 i = j + gcd ⁡ ( i , j ) 这 样 我 们 可 以 枚 举 i 和 i 的 因 子 做 为 g c d ( i , j ) 然 后 判 断 一 下 就 可 以 了 复 杂 度 O ( n l o g n )    n 需 要 预 处 理 然 后 有 个 问 题 我 疑 惑 的 是 枚 举 i 的 因 子 的 时 候 如 果 满 足 的 话 , 这 个 因 子 k 一 定 是 gcd ⁡ ( i , j ) 嘛 ? 好 像 是 的 , 因 为 假 设 k 是 i 的 因 子 , 同 时 i − j = = i ⊕ j = = k 由 于 i % k = = 0 所 以 j % k = = 0 所 以 k < = g c d ( i , j ) , 由 于 i − j > = gcd ⁡ ( i , j ) 所 以 k 只 能 是 gcd ⁡ ( i , j ) i和j都能写成gcd(i,j)*k的形式,那么一定大宇等于gcd.\\\\所以i \\oplus j==\\gcd(i,j)就能变成i\\oplus j ==i-j \\\\同时i=j+\\gcd(i,j)这样我们可以枚举i和i的因子做为gcd(i,j) \\\\然后判断一下就可以了\\\\ 复杂度O(nlogn)~~n需要预处理 \\\\然后有个问题我疑惑的是枚举i的因子的时候如果满足的话,\\\\这个因子k一定是\\gcd(i,j)嘛?\\\\好像是的,因为假设k是i的因子,同时i-j==i\\oplus j==k\\\\由于i\\%k==0 所以j\\%k==0 所以k<=gcd(i,j) ,\\\\由于i-j>=\\gcd(i,j)所以k只能是\\gcd(i,j) ijgcd(i,j)kgcd.ij==gcd(i,j)ij==iji=j+gcd(i,j)iigcd(i,j)O(nlogn)  nikgcd(i,j)kiij==ij==ki%k==0j%k==0k<=gcd(i,j)ij>=gcd(i,j)kgcd(i,j)
代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=3e7+10;
ll ans[N];
void prework(){
	for(int i=1;i<N;i++){
		for(int j=2*i;j<N;j+=i){
				int k=j-i;
				if(i==(k^j))	ans[j]++;
		}
	}
	for(int i=1;i<N;i++)
		ans[i]+=ans[i-1];
}
int main(){
	prework();
	int t;
	scanf("%d",&t);
	int cas=0;
	while(t--){
		++cas;
		int x;
		scanf("%d",&x);
		printf("Case %d: %lld\\n",cas,ans[x]);
	}
}

以上是关于UVA12716 GCD等于XOR GCD XOR 数论的主要内容,如果未能解决你的问题,请参考以下文章

Python 操作Redis

python爬虫入门----- 阿里巴巴供应商爬虫

Python词典设置默认值小技巧

《python学习手册(第4版)》pdf

Django settings.py 的media路径设置

Python中的赋值,浅拷贝和深拷贝的区别