设一个整数有m位,从左至右每位数字分别为a1,a2,a3,...,am,当对于任意1<=k<=m,有由a1到ak组成的数字为素数,则称该数为完全素数。例如:2333为完全素数,因为2,23,233,2333均为素数。
1 判断给定的一个数是否为完全素数:
//判断一个数是否为完全素数
#include<stdio.h>
#include<math.h>
int yes(int x);
int main()
{
int m,n=0,u=1;
int a[10]={0};
int i=0;
int flag=1;
printf("Enter number to be tested:");
scanf("%d",&m);
while(m)
{
a[i]=m%10;//存储每位数字
i++;
m=m/10;
n++;//存储位数
}
int x=a[0];
for(i=1;i<n;i++)
{
if(yes(x))
{
x*=10;
x+=a[i];
}
else
{
flag=0;
break;
}
}
if(flag)
printf("Yes!");
else
printf("No!");
return 0;
}
//判断是否为素数
int yes(int x)
{
for(int i=2;i<=sqrt(x);i++)
if(x%i==0)
return 0;
else
return 1;
}
2 给定位数m,打印所有位数为m的完全素数。
#include<stdio.h>
#include<math.h>
#include<stdbool.h>
bool is_prime(int n)
{
if(n<=1)
return false;
for(int i=2;i*i<=n;i++)
if(n%i==0)
return false;
return true;
}
void print_primes(int m)
{
for(int i=(pow(10,m-1))+1;i<pow(10,m);i++)
{
if(is_prime(i)) //若一个m位整数为完全素数
{
int flag=1;
int x=i;
for(int j=1;j<m;j++)
if(!is_prime(x/=10))
{
flag=0;
break;
}
if(flag)
printf("%d\t",i);
}
}
}
int main()
{
int m;
printf("请输入数字位数:");
scanf("%d",&m);
printf("所有%d位完全素数为:",m);
print_primes(m);
return 0;
}