筛法求素数 CSieve类为基类 CNumber为派生类 求大虾帮忙错在哪里
//以CSieve类为基类,实现CNumber类各成员函数,并编译执行
#include<iostream>
#include<math.h>
using namespace std;
class CSieve
{
private:
static int * p_sieve;
static int max_num;
public:
CSieve(unsigned long no)
{
max_num=no;
p_sieve=new int[max_num];
}
static void printPrime()
{
for(int i=0;i<max_num;i++)
{
cout<<p_sieve[i]<<" ";
if((i+1)%15==0)
{
cout<<endl;
}
}
}
static void release()
{
delete p_sieve;
}
};
int *CSieve::p_sieve=0;
int CSieve::max_num=0;
class CNumber:public CSieve
{
private:
unsigned long number;//a number
unsigned int sum_of_digit;//number的各位数之和
public:
CNumber(unsigned long num):CSieve(num)//构造函数
{
number=num;
sum_of_digit=number/100+((number%100)/10)+((number%100)%10);
}
bool isType1Prime(unsigned long num)//判断number是否是各位数之和为素数的数,如124
{
int m=0,i=0,k=0;
k=(int)sqrtf(sum_of_digit);
for(i=2;i<=k;i++)
if(m%i==0)
break;
if(i>k)
return true;
else
return false;
}
bool isType2Prime(unsigned long num)//判断number是否为各位数之和为素数的素数,如137
{
int m=0,i=0,k=0;
if(isType1Prime(number)==true)
{
k=(int)sqrtf(number);
for(i=2;i<k;i++)
if(m%i==0)
break;
if(i>k)
return true;
else
return false;
}
else
return false;
}
bool isType3Prime(unsigned long num)//判断number是否为各位数为素数且各位数之和仍为素数的素数,如373
{
int m=0,i=0,k=0;
int n=0,j=0,l=0;
int o=0,p=0,q=0;
if(isType2Prime(number)==true)
{
k=(int)sqrtf(number/100);
for(i=2;i<k;i++)
if(m%i==0)
break;
if(i>k)
{
l=(int)sqrtf((number%100)/10);
for(j=2;j<l;j++)
if(n%j==0)
break;
if(j>l)
{
q=(int)sqrtf((number%100)%10);
for(p=2;p<q;p++)
if(o%p==0)
break;
if(p>q)
return true;
else
return false;
}
else
return false;
}
else
return false;
}
else
return false;
}
void print()//打印number的值并输出number属于哪类素数的信息
{
cout<<"number:"<<number<<endl;
if(this->isType1Prime(number)==true)
cout<<"This number belongs to type1"<<endl;
else if(this->isType2Prime(number)==true)
cout<<"This number belongs to type2"<<endl;
else if(this->isType3Prime(number)==true)
cout<<"This number belongs to type3"<<endl;
else
cout<<"Null"<<endl;
}
};
void main()
{
long n;
cout<<"Enter a number:";
cin>>n;
CNumber number(n);
number.print();
CSieve::release();
system("pause");
}
[解决办法]
自己先调试一下,找出问题的所在,然后再来提问。