本文主要是介绍炫酷数学,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
【题目描述】
小希最近想知道一个东西,就是A+B=A|B(其中|为按位或)的二元组有多少个。
当然,直接做这个式子对小希来说太难了,所以小希改变了一些条件,她仅想知道其中A,B<N的情况,其中N为2的幂次。
当然,(A=1,B=0)和(A=0,B=1)被认为是不同的二元组。
【输入描述】
第一行输入一个非负整数M。
N=2^M,M≤100
【输出描述】
一个整数ans,对998244353取模。
【样例】
示例1
输入
0
输出
1示例2
输入
71
输出
588378066
思路:
对于 A、B 考虑每一位的情况,共有 (0,0)、(0,1)、(1,0)、(1,1) 四种情况,符合 A+B=A|B 的有 (0,0)、(0,1)、(1,0) 三种情况,根据乘法原理,故答案为 3^M
【源代码】
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#define PI acos(-1.0)
#define E 1e-6
#define INF 0x3f3f3f3f
#define N 100001
#define LL long long
const int MOD=998244353;
const int dx[]={0,1,0,-1};
const int dy[]={1,0,-1,0};
using namespace std;
LL quickPow(LL a,LL b){LL res=1;while(b){if(b&1)res=res*a%MOD;a=a*a%MOD;b>>=1;}return res;
}
int main(){int m;cin>>m;cout<<quickPow(3,m)<<endl;return 0;
}
这篇关于炫酷数学的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!