⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tp.cpp

📁 大数运算库
💻 CPP
字号:
//
// Agrawal, Kayal & Saxena Prime Prover (Conjecture 4)
//
// cl /O2 /GX tp.cpp polymod.cpp poly.cpp monty.cpp big.cpp ms32.lib
//
// Note neat way of assigning polynomials via the dummy type Variable
//

#include <iostream>
#include <big.h>
#include "poly.h"
#include "polymod.h"

using namespace std;

Miracl precision=100;

int main(int argc,char **argv)
{
    Big n;
    int r;

    if (argc!=2)
    {
        cout << "tp <number>" << endl;
        return 0;
    }

    n=argv[1];
    if (n==2)
    {
        cout << "PRIME" << endl;
        return 0;
    }
    if (small_factors(n))
    {
        cout << "COMPOSITE" << endl;
        return 0;
    }

    if (perfect_power(n))
    {
        cout << "COMPOSITE" << endl;
        return 0;
    }

    for (r=2;;r++)
        if ((n*n-1)%r!=0) break;

    modulo(n);

    Variable x;
    Poly M=pow(x,r)-1;  // M=x^r-1

    setmod(M);

    PolyMod lhs,rhs;

    lhs=x-1;            // left-hand side
    lhs=pow(lhs,n);     // (x-1)^n mod M

    rhs=x;              // right-hand side
    rhs=pow(rhs,n)-1;   // x^n-1   mod M

    if (lhs==rhs) cout << "PRIME" << endl;
    else          cout << "COMPOSITE" << endl;

    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -