- #1
gruba
- 206
- 1
Homework Statement
Write a program that will print all highly prime numbers from the input interval <a,b>. Prime number is highly prime if deletion of every digit from right is a prime.
Example:
239 is highly prime because 239,23,2 are primes.
2. The attempt at a solution
Could someone point out what are logic errors in the following program:
Code:
#include <stdio.h>
int isPrime(int p);
int isHighlyPrime(int n);
void printHighlyPrimeNumbers(int a,int b);
// check if p is a prime
int isPrime(int p)
{
int nd=2;//number of divisors
int d;//current divisor
for(d=2; d<p/2; d++)
{
if(p % d == 0)
nd++;
}
if(nd == 2)
return 1;
return 0;
}
// check if n is highly prime
int isHighlyPrime(int n)
{
int temp=n;
int i;
int digitCount=0;//number of digits in n
while(temp != 0)
{
temp=temp/10;
digitCount++;
}
temp=n;
//if number of digits is 1, only check if prime
if(digitCount == 1)
{
if(isPrime(temp))
return 1;
}
//else check if n,n/10,(n/10)/10,... are primes
else
{
for(i=1; i<=digitCount-1 && isPrime(temp); i++)
{
if(isPrime(temp))
temp=temp/10;
}
return 1;
}
return 0;
}
//print highly primes from a to b
void printHighlyPrimeNumbers(int a,int b)
{
int i;
for(i=a; i<=b; i++)
{
if(isHighlyPrime(i))
printf("%d ",i);
}
}
int main()
{
int a,b;
do
{
printf("a = ");
scanf("%d",&a);
}while(a<1);
do
{
printf("b = ");
scanf("%d",&b);
}while(b<1);
//swap if a>b
if(a > b)
{
int temp=a;
a=b;
b=temp;
}
printHighlyPrimeNumbers(a,b);
return 0;
}
Last edited: