/* 函数06:超级素数
超级素数的定义:
一个素数,依次从最低位去掉一位,两位……
若得到的都是素数,且各数字不为0,则称为超级素数。
编写程序求a~b之间超级素数的个数。
a,b由键盘输入
比如:237,23 ,2 都是素数,所以237是超级素数*/
#include<iostream>
#include<cmath>
using namespace std;
bool IsPrime(long);
bool IsSuperPrime(long);
int main()
{ long i,j,k;
int a,b,n=0;
cin>>a>>b;
for(i=a;i<=b;i=i+1)
if(IsSuperPrime(i))
{ n++;
if(n%5!=0) cout<<i<<",";
else cout<<i<<endl;
}
}
bool IsPrime(long i)
{
if(i==1)
return false;
int j;
for(j=2;j<i/2+i;j++)
{if(i%j==0)
return false;}
return true;
}
bool IsSuperPrime(long i)
{
while(i>0)
{
if(!IsPrime(i))
return false;
if(i%10==0)
return false;
i=i/10;
}
return true;
}
/* 函数06:超级素数
超级素数的定义:
一个素数,依次从最低位去掉一位,两位……
若得到的都是素数,且各数字不为0,则称为超级素数。
编写程序求a~b之间超级素数的个数。
a,b由键盘输入
比如:237,23 ,2 都是素数,所以237是超级素数*/
#include<iostream>
#include<cmath>
using namespace std;
bool IsPrime(long);
bool IsSuperPrime(long);
int main()
{
long i;
int a, b, n = 0;
cin >> a >> b;
for (i = a; i <= b; i = i + 1)
if (IsSuperPrime(i))
{
n++;
if (n % 5 != 0) cout << i << ",";
else cout << i << endl;
}
}
bool IsPrime(long i)
{
if (i == 1)
return true;
int j;
for (j = 2; j<i / 2 + 1; j++)
{
if (i%j == 0)
return false;
}
return true;
}
bool IsSuperPrime(long i)
{
while (i>0)
{
if (IsPrime(i))
{
if (i % 10 == 0)
return false;
i = i / 10;
}
else
return false;
}
return true;
}
//237不是超级素数,他是3的倍数
你代码逻辑有问题
/* 函数06:超级素数
超级素数的定义:
一个素数,依次从最低位去掉一位,两位……
若得到的都是素数,且各数字不为0,则称为超级素数。
编写程序求a~b之间超级素数的个数。
a,b由键盘输入
比如:237,23 ,2 都是素数,所以237是超级素数*/
#include<iostream>
#include<cmath>
using namespace std;
bool IsPrime(long);
bool IsSuperPrime(long);
int main()
{
long i, j, k;
int a, b, n = 0;
cin >> a >> b;
for (i = a; i <= b; i = i + 1)
if (IsSuperPrime(i))
{
n++;
if (n % 5 != 0) cout << i << ",";
else cout << i << endl;
}
}
bool IsPrime(long i)
{
if (i <= 2)
return false;
int j;
for (j = 2; j * j <= i; j++)
{
if (i % j == 0)
return false;
}
return true;
}
bool IsSuperPrime(long i)
{
if (i == 0)
return false;
while (i != 0)
{
if (!IsPrime(i))
return false;
if (i % 10 == 0)
return false;
i = i / 10;
}
return true;
}
我简化了一下代码实现,可供题主参考:
代码实现:
#include<stdio.h>
int isPrime(int n)
{
int i;
for (i = 2; i < n; i++)
{
if (n%i == 0)
return 0;
}
return 1;
}
int main()
{
int t;
int a,b,flag=0;
scanf("%d%d",&a,&b);
for (int i = a; i < b; i++)
{
t = i;
while (t)
{
if (!isPrime(t))
break;
t = t / 10;
}
if (t == 0){
printf("%5d", i);
flag++;
if(flag%5==0)
printf("\n");
}
}
return 0;
}
运行结果: