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

📄 slnum_p.cpp

📁 超长整数类及演示程序
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "slnum_p.h"
//---------------------------------------------------------------------------


#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

slnum   x,y,z;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
//---------------从string类中取出字符串转换为char * -------------------------------
char * strtoa(String ss)
{
     char *sa;
     sa=new char[strlen(ss.c_str())+1];
     strcpy(sa,ss.c_str() );
     return sa;
}
/*-----------------------------------------------------------------------
版权所有:贵州省天柱县二中  罗国文,邮编:556600,Email:xuefu998@yahoo.com.cn
本程序提供了一种关于素数判定的新算法,以这些基本函数为基础,可帮助我们
处理关于素数的许多命题。
版权声明:在您使用和推广本程序时尊重作者版权,不准在不经许可的情况下发表
-------------------------------------------------------------------------*/

slnum Test_1(slnum x)            //求模6的倍数
{
     slnum n;
     n=(x+1)/6;
     return  n;
}

int Test_2(slnum x)             //判断x的余数,返回值{-1,0,1}
{
     slnum n;
     slnum K;
     int k;
     K=x%6;
     k=K.sl [0];
     if(k==1||k==5)
     {   if(k==1)return (1);
         if(k==5)return (-1);
     }
     return (0);
}

int Test_P(slnum n,int k)        //P素性检验
{
    slnum m("1");
    slnum M;
    if (n==0)return 0;
    M=(n+1)/5;
    switch (k)
    {
        case 0:  return (0);
        case 1:
            {  for(m=1;m<=M;m=m+1){
                  if((n%(m*6 -1)==m*5 - 1)||(n%(m*6 + 1)==m))return 0;
                  }
             } return 1;
        case -1:
            {  for(m=1;m<=M;m=m+1){
               if((n%(m*6 - 1)==m)||(n%(m*6 + 1)==m*5 + 1))return 0;
                }
            }  return 1;
    }
    return 0;
}

//数x的素性检验,x为素数返回1,否则为0
int Test_X(slnum x)
{
   slnum n;
   int k;
   n=Test_1(x);
   k=Test_2(x);
   return (Test_P(n,k));
}



void Out_X(slnum a,slnum b)    //输出[a,b]间的素数
{ slnum x;
  Form1->Memo1->Lines->Clear();
  if (a.arr_n ==1&&a.sl[0]<3)  Form1->Memo1->Lines->Append('2');
  if (a.arr_n ==1&&a.sl[0]<5)  Form1->Memo1->Lines->Append('3');
  for(x=a;x<=b;x=x+1)
  {  if(Test_X(x)==1)  Form1->Memo1->Lines->Append(x.soure );}
}
/*
void Out_N1(slnum a,slnum b)    //输出[a,b]间使6n+1为素的n值
{  slnum n;
   for(n=a;n<=b;n=n+1)
   { if(Test_P(n,1)==1) cout<<n.soure <<endl;}
}

void Out_N_1(slnum a,slnum b)    //输出[a,b]间使6n-1为素的n值
{  slnum n;
   for(n=a;n<=b;n=n+1)
   { if(Test_P(n,-1)==1) cout<<n.soure<<endl;}
}
//输出[a,b]间的孪生素数
void Out_2P(slnum a,slnum b)
{
        slnum n,n1,n2;
        n1=Test_1(a);
        n2=Test_1(b);
        for  (n=n1;n<=n2;n=n+1)
            if(Test_P(n,-1)*Test_P(n,1)==1)
               cout<<"["<<n.soure<<":("<<n*6-1<<" , "<<n*6+1<<")]"<<endl;
}


//求出任意的大于4的整数m为中心的第一对素数
int Out_Q(slnum m)
{
   slnum S;int s;
   slnum n, k;
   n=Test_1(m);
   S=(m%6);
   s=S.sl[0];
   if(n==0)return  0 ;
   switch (s) {
     case 5 :
                for(k=0;k<n;k=k+1)
                {if(Test_P(n+k,-1)*Test_P(n-k,-1)==1)
                   { cout<<"["<<m*2<<":("<<(n+k)*6-1<<" , "<<(n-k)*6-1<<")]"<<endl;
                     return 0;}
                 }
                   cout<<"Not find this number!!"<<endl;
     case 4 :
              for(k=0;k<n;k=k+1)
                {if(Test_P(n+1+k,1)*Test_P(n-k,1)==1)
                   { cout<<"["<<m*2<<":("<<(n+1+k)*6+1<<" , "<<(n-k)*6+1<<")]"<<endl;
                     return 0;}
                 if(Test_P(n+k,1)*Test_P(n+1-k,1)==1)
                   { cout<<"["<<m*2<<":("<<(n+k)*6+1<<" , "<<(n+1-k)*6+1<<")]"<<endl;
                     return 0;}
                 }
                   cout<<"Not find this number!!"<<endl;
     case 3 :
              for(k=0;k<n;k=k+1)
                {if(Test_P(n+1+k,1)*Test_P(n-k,-1)==1)
                   { cout<<"["<<m*2<<":("<<(n+1+k)*6+1<<" , "<<(n-k)*6-1<<")]"<<endl;
                     return 0;}
                 if(Test_P(n+k,1)*Test_P(n+1-k,-1)==1)
                   { cout<<"["<<m*2<<":("<<(n+k)*6+1<<" , "<<(n+1-k)*6-1<<")]"<<endl;
                     return 0;}
                 if(Test_P(n+1+k,-1)*Test_P(n-k,1)==1)
                   { cout<<"["<<m*2<<":("<<(n+1+k)*6-1<<" , "<<(n-k)*6+1<<")]"<<endl;
                     return 0;}
                 if(Test_P(n+k,-1)*Test_P(n+1-k,1)==1)
                   { cout<<"["<<m*2<<":("<<(n+k)*6-1<<" , "<<(n+1-k)*6+1<<")]"<<endl;
                     return 0;}
                 }
                  cout<<"Not find this number!!"<<endl;
     case 2 :
              for(k=0  ; k < n ; k=k+1)
                {if(Test_P(n+1+k,-1)*Test_P(n-k,-1)==1)
                   { cout<<"["<<m*2<<":("<<(n+1+k)*6-1<<" , " <<(n-k)*6-1<<")]"<<endl;
                     return 0;}
                 if(Test_P(n+k,-1)*Test_P(n+1-k,-1)==1)
                   { cout<<"["<<m*2<<":("<<(n+k)*6-1<<" , "<<(n+1-k)*6-1<<")]"<<endl;
                     return 0;}
                 }
                 cout<<"Not find this number!!"<<endl;
     case 1 :
                for(k=0;k<n;k=k+1)
                {if(Test_P(n+k,1)*Test_P(n-k,1)==1)
                    {cout<<"["<<m*2<<":("<<(n+k)*6+1<<" , "<<(n-k)*6+1<<")]"<<endl;
                    return 0; }
                }
                cout<<"Not find this number!!"<<endl;
     case 0 :
                for(k=0;k<n;k=k+1)
                {if(Test_P(n+k,1)*Test_P(n-k,-1)==1)
                   { cout<<"["<<m*2<<":("<<(n+k)*6+1<<" , "<<(n-k)*6-1<<")]"<<endl;
                     return 0;}
                 if(Test_P(n+k,-1)*Test_P(n-k,1)==1)
                   { cout<<"["<<m*2<<":("<<(n+k)*6-1<<" , "<<(n-k)*6+1<<")]"<<endl;
                     return 0;}
                 }
                 cout<<"Not find this number!!"<<endl;
     }
     return 1;
}


*/



void __fastcall TForm1::Button1Click(TObject *Sender)
{
   x=strtoa(Form1->Edit1->Text );
   y=strtoa(Form1->Edit2->Text );
   Out_X(x,y);
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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