hrefspace

 找回密码
 立即注册
搜索
热搜: PHP PS 程序设计
查看: 408|回复: 8

寻个 分解质因数V2.04破解版

[复制链接]

557

主题

557

帖子

1898

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1898
发表于 2023-9-25 13:08:40 | 显示全部楼层 |阅读模式
如题,如果谁有麻烦发我邮箱
1183812371@qq.com
回复

使用道具 举报

0

主题

184

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2023-9-25 13:09:39 | 显示全部楼层
回复

使用道具 举报

0

主题

179

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2023-9-25 13:09:58 | 显示全部楼层
网上的我找过了,下载不了。
回复

使用道具 举报

0

主题

173

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2023-9-25 13:10:21 | 显示全部楼层
3# 不穿男裤的酷男
很难下载吗?呵呵

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

0

主题

172

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2023-9-25 13:10:38 | 显示全部楼层
4楼的朋友麻烦发我邮箱,谢谢、
回复

使用道具 举报

0

主题

184

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2023-9-25 13:10:57 | 显示全部楼层
5# 不穿男裤的酷男

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

0

主题

173

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2023-9-25 13:11:34 | 显示全部楼层
  1. #include <iostream>#include <cmath>using namespace std;unsigned int MPow(unsigned int factor, unsigned int n){    unsigned int result = 1;    for (unsigned int i = 0; i < n; ++i)        result *= factor;    return result;}// common list declaration and implementiontemplate <typename T>class SimpleList{private:    struct SimpleListNode    {        explicit SimpleListNode (const T &obj, SimpleListNode *pt = 0) : data(obj), next(pt) { }        T data;        SimpleListNode *next;    };public:    class Iterator    {    public:        explicit Iterator(SimpleListNode *pNode = 0) : node(pNode) { }        T &operator *() { return node->data; }        T *operator ->() const { return &(node->data); }        Iterator &operator ++()        {            node = node->next;            return *this;        }        friend bool operator == (const Iterator &it1, const Iterator &it2)        {            return it1.node == it2.node;        }        friend bool operator != (const Iterator &it1, const Iterator &it2)        {            return !(it1 == it2);        }    public:        SimpleListNode *node;    };    class ConstIterator    {    public:        explicit ConstIterator(const SimpleListNode *pNode = 0) : node(pNode) { }        const T &operator *() const { return node->data; }        const T *operator ->() const { return &(node->data); }        ConstIterator &operator ++()        {            node = node->next;            return *this;        }        friend bool operator == (const ConstIterator &it1, const ConstIterator &it2)        {            return it1.node == it2.node;        }        friend bool operator != (const ConstIterator &it1, const ConstIterator &it2)        {            return !(it1 == it2);        }    public:        const SimpleListNode *node;    };    SimpleList()        : head(0), tail(0) { }    SimpleList(const SimpleList &lst)        : head(0), tail(0)    {        append(lst);    }    ~SimpleList()    {        clear();    }    SimpleList & operator = (const SimpleList &lst)    {        clear();        append(lst);    }    ConstIterator begin() const { return ConstIterator(head); }    Iterator begin() { return Iterator(head); }    ConstIterator end() const { return ConstIterator(0); }    Iterator end() { return Iterator(0); }    ConstIterator last() const { return ConstIterator(tail); }    Iterator last() { return Iterator(tail); }    void append(const SimpleList &lst)    {        for (SimpleListNode *p = lst.head; p; p = p->next)            push_back(p->data);    }    void clear()    {        while(!empty())        {            SimpleListNode *p = head->next;            delete head;            head = p;        }    }    unsigned int size() const    {        unsigned int sz = 0;        for (const SimpleListNode *p = head; p; p = p->next)            ++sz;        return sz;    }    bool empty() const    {         return head == 0;     };    void push_front(const T &data)    {        head = new SimpleListNode(data, head);        if(!tail)            tail = head;    }    void push_back(const T &data)    {        if(tail)        {            tail->next = new SimpleListNode(data);            tail = tail->next;        }        else        {            head = tail = new SimpleListNode(data);        }    }    void pop_front()    {        SimpleListNode *tmp = head;        if(head == tail)            head = tail = 0;        else            head = head->next;        delete tmp;    }    void pop_back()    {        if(head == tail)        {            delete head;            head = tail = 0;        }        else        {              SimpleListNode *tmp;            for(tmp = head; tmp->next != tail; tmp = tmp->next)                ;            delete tail;            tail = tmp;            tail->next = 0;        }    }private:    SimpleListNode *head, *tail;};class MFactorCalulator{public:    typedef SimpleList<unsigned int> MPrimeList;        struct MFactor    {        MFactor(unsigned int fct, unsigned rep = 0)            : factor(fct), repeat(rep) {}        unsigned int factor;        unsigned int repeat;    };    typedef SimpleList<MFactor> MFactorList;    struct MPerfectNumber    {        MPerfectNumber(unsigned int num, const MFactorList &factorList)            : number(num), factors(factorList) {}        unsigned int number;        MFactorList factors;    };    typedef SimpleList<MPerfectNumber> MPerfectNumberList;public:    MFactorCalulator(unsigned int upper)        : mUpper(upper) {}    const MPrimeList &PrimeList() const    {        return mPrimeChain;    }    const MPerfectNumberList &PerfectNumberList() const    {        return mPerfectNumberChain;    }    void DoCalculate()    {        FindPrimes(mUpper);        FindPerfectNumber(mUpper);    }private:    unsigned int mUpper;    MPrimeList mPrimeChain;    MPerfectNumberList mPerfectNumberChain;    void FindPrimes(unsigned int upper)    {        mPrimeChain.clear();        mPrimeChain.push_back(2);        mPrimeChain.push_back(3);        for (unsigned int i = 5; i <= upper; i += 2)        {            for (MPrimeList::Iterator it = ++mPrimeChain.begin(); it != mPrimeChain.end() && (i % *it); ++it)            {                if (*it * *it > i)                {                    mPrimeChain.push_back(i);                    break;                }            }        }    }    void FindPerfectNumber(unsigned int upper)    {        for (unsigned int i = 2; i <= upper; ++i)            CheckPerfectNumber(i);    }    bool CheckPerfectNumber(unsigned int number)    {        unsigned int quotient = number;          MFactorList factor_list;        for (MPrimeList::Iterator it = mPrimeChain.begin(); it != mPrimeChain.end(); ++it)        {                        if (*it * *it > quotient)            {                MFactor factor1(quotient, 0);                factor1.repeat = 1;                factor_list.push_back(factor1);                break;            }            MFactor factor(*it, 0);            while (quotient % *it == 0)            {                ++factor.repeat;                quotient /= *it;            }            if (factor.repeat > 0)                factor_list.push_back(factor);        }        if (CalculateFactorSum(factor_list) == 2 * number)         {            mPerfectNumberChain.push_back(MPerfectNumber(number, factor_list));            return true;        }        return false;    }    unsigned int CalculateFactorSum(const MFactorList &chain)    {        unsigned int chainsize = chain.size();        MFactorList::ConstIterator *factor_arr = new MFactorList::ConstIterator[chainsize];        unsigned int* counter = new unsigned int[chainsize + 1]; // counter[chainsize] is to quit loop        MFactorList::ConstIterator p = chain.begin();        for (unsigned int i = 0; i < chainsize; ++i, ++p)        {            factor_arr[i] = p;            counter[i] = 0;        }        counter[chainsize] = 0;        unsigned int sum = 0;        while (!counter[chainsize]) // use the last element to quit loop        {            unsigned mix_product = 1;            for (unsigned j = 0; j < chainsize; ++j)                mix_product *= MPow(factor_arr[j]->factor, counter[j]);            sum += mix_product;            ++counter[0];            for (j = 0; (j < chainsize) && (counter[j] > factor_arr[j]->repeat); ++j)            {                counter[j] = 0;                ++counter[j + 1];            }        }        delete []factor_arr;        delete []counter;        return sum;    }};int main(){    cout << "Input max number: ";    int upper;    cin >> upper;    MFactorCalulator calc(upper);    calc.DoCalculate();    for (MFactorCalulator::MPerfectNumberList::ConstIterator it = calc.PerfectNumberList().begin();         it != calc.PerfectNumberList().end(); ++it)    {        cout << it->number << " = ";        for (MFactorCalulator::MFactorList::ConstIterator itFactor = it->factors.begin();        (itFactor.node)->next != (it->factors.end()).node; ++itFactor)        {                        cout << itFactor->factor << '^' << itFactor->repeat;            cout << " * ";        }        cout << itFactor->factor << '^' << itFactor->repeat;        cout << endl;    }    return 0;}
复制代码
回复

使用道具 举报

0

主题

186

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2023-9-25 13:12:32 | 显示全部楼层
还有拿这个骗钱的东东????
叫PARI无地自容啊。。。。。
回复

使用道具 举报

0

主题

185

帖子

29

积分

新手上路

Rank: 1

积分
29
发表于 2023-9-25 13:13:31 | 显示全部楼层
本来想去下载比较下跟PARI的差异,看到最大只能分解29位,我就笑了。。。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|hrefspace

GMT+8, 2024-11-22 21:18 , Processed in 0.068008 second(s), 23 queries .

Powered by hrefspace X3.4 Licensed

Copyright © 2022, hrefspace.

快速回复 返回顶部 返回列表