📄 slnum_p.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "slnum_p.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "SHDocVw_OCX"
#pragma resource "*.dfm"
TForm1 *Form1;
long a,b,c;
//---------------------------------------------------------------------------
__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
本程序提供了一种关于素数判定的新算法,以这些基本函数为基础,可帮助我们
处理关于素数的许多命题。
版权声明:在您使用和推广本程序时尊重作者版权,不准在不经许可的情况下发表
-------------------------------------------------------------------------*/
long Test_1(long x) //求模2的倍数
{
long n;
n=x/2;
return n;
}
int Test_2(long x) //判断x模2的余数,返回值{0,1}
{
int k;
k=x%2;
return k;
}
int Test_P(long n) //P素性检验 当(2n+1)为素返回1,否则5返回0
{
if(n==0)return 0;
if((n>3)&& (n%3==1)) return 0;
else {
long m,N;
N=n/2;
for(m=2;(m*m+m)<=N;m++)
{
if (Test_P(m))
if(n%(m*2+1)==m) return 0;
}
}
return 1;
}
//数x的素性检验,x为素数返回1,否则为0
int Test_X(long x)
{
if (x==1) return 0;
if (x==2) return 1;
if (Test_2(x)==0) return 0;
long n;
n=Test_1(x);
return (Test_P(n));
}
//----------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
long x,A,B; int i=0;
Form1->Label7->Caption ="";
A=a;B=b;
char *s,*ss;
s=new char[65536];
ss=new char[65536];
Form1->RichEdit1->Lines->Clear();
// if (A<=2) { Form1->RichEdit1->Lines->Append('2'),i=1;}
for(x=A;x<=B;x=x+1)
if(Test_X(x)==1)
{++i;
ltoa(x,s,10);
Form1->RichEdit1->Lines->Append(s); }
strcpy(ss,"计算完成,这个范围内的素数有:");
ltoa(i,s,10);
strcat(ss,s);
strcat(ss,"个");
Form1->Label7->Caption =ss;
delete s;
delete ss;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit2Exit(TObject *Sender)
{
b=atol(strtoa(Form1->Edit2->Text));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1Exit(TObject *Sender)
{
a=atol(strtoa(Form1->Edit1->Text));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button6Click(TObject *Sender)
{
long x,A,B; int i=0;
A=a;B=b;
Form1->Label7->Caption ="";
char *s,*ss;
s=new char[65536];
ss=new char[65536];
Form1->RichEdit1->Lines->Clear();
for(x=A;x<=B;x=x+1)
if(Test_P(x)==1)
{++i;
ltoa(x,s,10);
Form1->RichEdit1->Lines->Append(s );}
strcpy(ss,"计算完成,这个范围内的Q数有:");
ltoa(i,s,10);
strcat(ss,s);
strcat(ss,"个");
Form1->Label7->Caption =ss;
delete s;
delete ss;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit3Exit(TObject *Sender)
{
a=atol(strtoa(Form1->Edit3->Text));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit4Exit(TObject *Sender)
{
b=atol(strtoa(Form1->Edit4->Text));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit5Exit(TObject *Sender)
{
a=atol(strtoa(Form1->Edit5->Text));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit6Exit(TObject *Sender)
{
b=atol(strtoa(Form1->Edit6->Text));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
long x,A,B,i=0;
char *s,*ss;
Form1->Label8->Caption ="";
s=new char[65536];
ss=new char[65536];
A=Test_1(a);B=Test_1(b)-1;
Form1->RichEdit2->Lines->Clear();
for(x=A;x<=B;x=x+1)
if(Test_P(x)*Test_P(x+1))
{++i;
ltoa(2*x+1,s,10);
strcpy(ss,s);
strcat(ss,"------>");
ltoa(2*x+3,s,10);
strcat(ss,s);
Form1->RichEdit2->Lines->Append(ss );}
strcpy(ss,"这个范围内的孪生素数对有数有:");
ltoa(i,s,10);
strcat(ss,s);
strcat(ss,"对");
Form1->Label8->Caption =ss;
delete s;
delete ss;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
Form1->RichEdit3->Lines->Clear();
int k,flag;
long A,i,x,r,B;
A=a;B=b;
Form1->Label9->Caption ="";
char *s,*ss;
s=new char[65536];
ss=new char[65536];
for (i=A-1;i<B;i++)
{
k=Test_2(i);
x=Test_1(i) ;
r=0; flag=1;
while (flag)
{
if (r>x){ Form1->RichEdit3->Lines->Append("找不到这个偶数的1+1解");return;}
if(Test_P(x-r)*Test_P(x+r+k))
{ ltoa(2*(x-r)+1,s,10);
strcpy(ss,s);
strcat(ss,"+");
ltoa(2*(x+r+k)+1,s,10);
strcat(ss,s);
strcat(ss,"=");
ltoa(2*i+2,s,10);
strcat(ss,s);
Form1->RichEdit3->Lines->Append(ss );
flag=0;
}
r++;
}
}
Form1->Label9->Caption ="计算已经完成,请查看数据……";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Form1->RichEdit3->Lines->Clear();
Form1->Label9->Caption ="";
int k;
long i,j=0,x,r;
char *s,*ss;
s=new char[65536];
ss=new char[65536];
i=a-1;
k=Test_2(i);
x=Test_1(i) ;
r=0;
while (r<x)
{
if (r>x){ Form1->RichEdit3->Lines->Append("找不到这个偶数的1+1解");return;}
if(Test_P(x-r)*Test_P(x+r+k))
{ j++;
ltoa(2*(x-r)+1,s,10);
strcpy(ss,s);
strcat(ss,"+");
ltoa(2*(x+r+k)+1,s,10);
strcat(ss,s);
strcat(ss,"=");
ltoa(2*i+2,s,10);
strcat(ss,s);
Form1->RichEdit3->Lines->Append(ss );
}
r++;
}
strcpy(ss,"这个偶数2a的1+1解有:");
ltoa(j,s,10);
strcat(ss,s);
strcat(ss,"个");
Form1->Label9->Caption =ss;
delete s;
delete ss;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormResize(TObject *Sender)
{
Form1->RichEdit1->Height =Form1->PageControl1->Height-100;
Form1->RichEdit2->Height =Form1->PageControl1->Height-100;
Form1->RichEdit3->Height =Form1->PageControl1->Height-100;
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -