📄 slnum_p.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 + -