首页 > 代码库 > U4704 函数
U4704 函数
U4704 函数
- 0通过
- 105提交
- 题目提供者飞翔
- 标签
- 难度尚无评定
最新讨论
- 暂时没有讨论
题目背景
设gcd(a,b)为a和b的最大公约数,xor(a,b)为a异或b的结果。
最大公约数
异或
题目描述
kkk总是把gcd写成xor。今天数学考试恰好出到了gcd(a,b)=?这样的题目,但是kkk全部理解成了xor(a,b)=?
幸好这是填空题,老师只看kkk的答案是否正确而不在意过程。于是kkk想知道,对于所有不超过N的正整数a和b(a>=b)有多少组(a,b)满足可以使kkk的答案是正确的?
输入输出格式
输入格式:
一个整数N
输出格式:
输出(a,b)的组数
输入输出样例
输入样例#1:
7
输出样例#1:
4
说明
1<=N<=100000
题意:
问整数n以内,有多少对整数a、b满足(1≤b≤a)且gcd(a, b) = xor(a, b)
分析:
gcd和xor看起来风马牛不相及的运算,居然有一个比较"神奇"的结论:
设gcd(a, b) = xor(a, b) = c, 则 c = a - b
这里
有比较严格的证明。
有了这个结论后,我们可以枚举约数c,然后枚举c的倍数a,再根据c = a - b计算b,检验b是否满足gcd(a, b) = xor(a, b)
90代码(最后一个点不知道是什么坑):
#include<cstdio>using namespace std;int n,ans;int main(){ scanf("%d",&n); for(int c=1;c<=n;c++){ for(int a=c*2;a<=n;a+=c){ int b=a-c; if((a^c)==b) ans++; } } printf("%d\n",ans); return 0;}
U4704 函数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。