社区讨论
关于 constexpr
学术版参与者 4已保存回复 9
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 9 条
- 当前快照
- 1 份
- 快照标识符
- @lo7xw4pu
- 此快照首次捕获于
- 2023/10/27 09:33 2 年前
- 此快照最后确认于
- 2023/10/27 09:33 2 年前
考虑这段代码
CPP#include <stdio.h>
#include <stdint.h>
#include <array>
using u64 = uint64_t;
constexpr u64 M = 14647171131086947261ull;
inline constexpr std::array<u64, 1 << 16> prep(u64 x)
{
std::array<u64, 1 << 16> arr = {0};
arr[0] = 1;
for (u64 i = 1; i < (1 << 16); i++)
arr[i] = x * arr[i - 1];
return arr;
}
constexpr std::array<u64, 1 << 16>
arr0 = prep(14647171131086947261ull),
// arr1 = prep(3368000560697704449ull),
// arr2 = prep(18402376254088019969ull),
// arr3 = prep(6896136929411072001ull);
/*
inline constexpr u64 qpow(u64 x)
{
u64 x0 = x & ((1 << 16) - 1);
u64 x1 = (x >> 16) & ((1 << 16) - 1);
u64 x2 = (x >> 32) & ((1 << 16) - 1);
u64 x3 = (x >> 48) & ((1 << 16) - 1);
return arr0[x0] * arr1[x1] * arr2[x2] * arr3[x3];
}
*/
int main()
{
for (int i = 0; i < (1 << 16); i++)
printf("%llu ", arr0[i]);
}
如果要编译的话这段代码需要几分钟,主要是因为那个
constexpr 大概需要算 个数。但是如果把
constexpr 去掉那么 1s 内跑完。是什么造成了这种差距
回复
共 9 条回复,欢迎继续交流。
正在加载回复...