本文整理汇总了C++中Vec::elts方法的典型用法代码示例。如果您正苦于以下问题:C++ Vec::elts方法的具体用法?C++ Vec::elts怎么用?C++ Vec::elts使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Vec
的用法示例。
在下文中一共展示了Vec::elts方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: AddFile
void FileList::AddFile(const char *name)
{
Vec<char> item;
item.SetLength(strlen(name)+1);
strcpy(item.elts(), name);
data.append(item);
}
示例2: conv
// NOTE: the signature for this is in lzz_p.h
void conv(vec_zz_p& x, const Vec<long>& a)
{
long i, n;
n = a.length();
x.SetLength(n);
VectorConv(n, x.elts(), a.elts());
}
示例3: FFT
void FFT(long* A, const long* a, long k, long q, const long* root, FFTMultipliers& tab)
// performs a 2^k-point convolution modulo q
{
if (k <= 1) {
if (k == 0) {
A[0] = a[0];
return;
}
if (k == 1) {
long a0 = AddMod(a[0], a[1], q);
long a1 = SubMod(a[0], a[1], q);
A[0] = a0;
A[1] = a1;
return;
}
}
// assume k > 1
if (k > tab.MaxK) PrecompFFTMultipliers(k, q, root, tab);
static Vec<long> AA_store;
AA_store.SetLength(1L << k);
long *AA = AA_store.elts();
BitReverseCopy(AA, a, k);
long n = 1L << k;
long s, m, m_half, m_fourth, i, j, t, u, t1, u1, tt, tt1;
// s = 1
for (i = 0; i < n; i += 2) {
t = AA[i + 1];
u = AA[i];
AA[i] = AddMod(u, t, q);
AA[i+1] = SubMod(u, t, q);
}
for (s = 2; s < k; s++) {
m = 1L << s;
m_half = 1L << (s-1);
m_fourth = 1L << (s-2);
const long* wtab = tab.wtab_precomp[s].elts();
const mulmod_precon_t *wqinvtab = tab.wqinvtab_precomp[s].elts();
for (i = 0; i < n; i+= m) {
long *AA0 = &AA[i];
long *AA1 = &AA[i + m_half];
#if (NTL_PIPELINE)
// pipelining: seems to be faster
t = AA1[0];
u = AA0[0];
t1 = MulModPrecon(AA1[1], wtab[1], q, wqinvtab[1]);
u1 = AA0[1];
for (j = 0; j < m_half-2; j += 2) {
long a02 = AA0[j+2];
long a03 = AA0[j+3];
long a12 = AA1[j+2];
long a13 = AA1[j+3];
long w2 = wtab[j+2];
long w3 = wtab[j+3];
mulmod_precon_t wqi2 = wqinvtab[j+2];
mulmod_precon_t wqi3 = wqinvtab[j+3];
tt = MulModPrecon(a12, w2, q, wqi2);
long b00 = AddMod(u, t, q);
long b10 = SubMod(u, t, q);
tt1 = MulModPrecon(a13, w3, q, wqi3);
long b01 = AddMod(u1, t1, q);
long b11 = SubMod(u1, t1, q);
AA0[j] = b00;
AA1[j] = b10;
AA0[j+1] = b01;
AA1[j+1] = b11;
t = tt;
u = a02;
t1 = tt1;
u1 = a03;
}
AA0[j] = AddMod(u, t, q);
AA1[j] = SubMod(u, t, q);
AA0[j + 1] = AddMod(u1, t1, q);
//.........这里部分代码省略.........
示例4: UseFFTPrime
void UseFFTPrime(long index)
{
long numprimes = FFTTables_store.length();
if (index < 0 || index > numprimes)
Error("invalid FFT prime index");
if (index < numprimes) return;
// index == numprimes
long q, w;
NextFFTPrime(q, w);
double qinv = 1/((double) q);
long mr = CalcMaxRoot(q);
FFTTables_store.SetLength(numprimes+1);
FFTTables = FFTTables_store.elts();
FFTPrimeInfo& info = FFTTables[numprimes];
info.q = q;
info.qinv = qinv;
info.RootTable.SetLength(mr+1);
info.RootInvTable.SetLength(mr+1);
info.TwoInvTable.SetLength(mr+1);
info.TwoInvPreconTable.SetLength(mr+1);
long *rt = &info.RootTable[0];
long *rit = &info.RootInvTable[0];
long *tit = &info.TwoInvTable[0];
mulmod_precon_t *tipt = &info.TwoInvPreconTable[0];
long j;
long t;
rt[mr] = w;
for (j = mr-1; j >= 0; j--)
rt[j] = MulMod(rt[j+1], rt[j+1], q);
rit[mr] = InvMod(w, q);
for (j = mr-1; j >= 0; j--)
rit[j] = MulMod(rit[j+1], rit[j+1], q);
t = InvMod(2, q);
tit[0] = 1;
for (j = 1; j <= mr; j++)
tit[j] = MulMod(tit[j-1], t, q);
for (j = 0; j <= mr; j++)
tipt[j] = PrepMulModPrecon(tit[j], q, qinv);
// initialize data structures for the legacy inteface
NumFFTPrimes = FFTTables_store.length();
FFTPrime_store.SetLength(NumFFTPrimes);
FFTPrime = FFTPrime_store.elts();
FFTPrime[NumFFTPrimes-1] = q;
FFTPrimeInv_store.SetLength(NumFFTPrimes);
FFTPrimeInv = FFTPrimeInv_store.elts();
FFTPrimeInv[NumFFTPrimes-1] = qinv;
}