简单的公式
const int mode=1e9+7;
class Solution {
public:
/**
* 返回c[n]%1000000007的值
* @param n long长整型 即题目中的n
* @return int整型
*/
long long Mode(long long a, long long b){
long long sum = 1;
while (b) {
if (b%2) {
sum =(sum*a)%mode;
b--;
}
b/=2;
a=a*a%mode;
}
return sum;
}
int Answerforcn(long long n) {
// write code here
long long an=2*Mode(3,n-1)%mode;
long long bn=7*Mode(5,n-1)%mode;
long long cn=an*bn%mode;
int ans=cn;
return ans;
}
};
class Solution
{
public:
typedef long long ll;
ll n, k, d[100010];
ll ans = 0, cnt = 1;
inline void dfs(ll x, ll p)
{
for (ll i = -k + 2; i <= 1; ++i) {
if (x * k + i <= n) {
++cnt;
ans += (d[p] ^ d[cnt]);
dfs(x * k + i, cnt);
} else return;
}
}
long long tree6(int K, vector<int> &a)
{
n = a.size();
k = K;
for (int i = 0; i < n; ++i)
{
d[i + 1] = a[i];
}
dfs(1, 1);
return ans;
}
};
整除问题
class Solution {
using ll = long long;
ll get_43(ll n) {
ll ans = n / 43;
ans = ans - ans / 47;
return ans;
}
ll get_47(ll n) {
ll ans = n / 47;
ans = ans - ans / 43;
return ans;
}
ll get_2021(ll n) { return n / 2021; }
ll get(ll n, ll m) {
ll ans = 0;
// 43*47
ans = ans + get_43(n) * get_47(m);
ans = ans + get_47(n) * get_43(m);
// 1*2021
ans = ans + n * get_2021(m);
ans = ans + m * get_2021(n);
ans = ans - get_2021(n) * get_2021(m);
return ans;
}
public:
/**
* 寻找所有能整除 2021 的数对个数
* @param A long长整型
* @param B long长整型
* @param C long长整型
* @param D long长整型
* @return long长整型
*/
long long findPairs(long long A, long long B, long long C, long long D) {
ll ans = get(B, D);
ans = ans - get(A - 1, D);
ans = ans - get(B, C - 1);
ans = ans + get(A - 1, C - 1);
return ans;
}
};
全部评论
(0) 回帖