试图以正确的方式设计小项目,并在其中遇到麻烦:\
关于任务:需要使用fft实现大数乘法。
首先,我有课
class LargeNumber{};
class Field{}; -- abstract (maybe interface would be better)
class C_C:public virtual Field{};
class Z_p:public virtual Field{};因此,LargeNumber可以使用Z_P (模P)或C_C (复杂)类(更正确:C_C和Z_P有Mul和Sum函数来乘LargeNumber对象)
但另一项更有趣和困难的任务。
我需要计算所有的操作和时间,每次‘大’的操作。还需要抛出消息和创建日志。
如何解决这个问题?(我该怎么办?)
如果你评论模式和你的最佳实践的话,那也是很棒的。所以这门课:
class LargeNumber {
private:
int length;
vector <short int> number;
public:
//prototype
LargeNumber clone(){
return (*this);
}
//get
int Length() const;
vector <short int> Number()const;
//static
static LargeNumber& GenerateOne(int);// create new LargeNumber
static void Print(const LargeNumber& print);
//constructors
LargeNumber();
LargeNumber(const LargeNumber& obj);
explicit LargeNumber(int len);
explicit LargeNumber(vector <short int>);
LargeNumber(int,int);
//destructors
~LargeNumber();
void Kill();
//operators
LargeNumber& operator= (const LargeNumber& );
LargeNumber& operator--();
LargeNumber& operator++();
bool operator<(const LargeNumber&)const;
};
class Field {
private:
inline int max(const int a, const int b){return (a>b?a:b);}
inline int min(const int a, const int b){return (a<b?a:b);}
int i;
//need Mod and 2**P-1
LargeNumber& Deux (const int );
LargeNumber& Mod (LargeNumber&);
public:
virtual ~Field();
virtual LargeNumber& Sum (const LargeNumber& , const LargeNumber& );
virtual LargeNumber& Sub (const LargeNumber& , const LargeNumber& );
virtual LargeNumber& Mul (const LargeNumber& , const LargeNumber& );
virtual LargeNumber& Pow (const LargeNumber& , const LargeNumber& );
virtual bool Prime (LargeNumber& );
}; 发布于 2012-02-12 20:26:14
不要重新发明轮子,使用现有的任意精确算法的良好实现,比如Bruno的CLN (它部分基于GMP)。
https://softwareengineering.stackexchange.com/questions/134652
复制相似问题