use C language only!! Use of looops if statements and arrays is allowed Given 20
ID: 3813279 • Letter: U
Question
use C language only!!
Use of looops if statements and arrays is allowed
Given 20 positive integer values as input, identify all values that are not prime and for such values find the next prime value that is larger than the product of the value and the resulting value that was immediately before it. When the first value input is not prime use one more than the value squared as the starting point in your search for a prime number. Example Execution #1 (first value not prime): Enter data now: 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 Final prime data: 17 5 31 7 59 541 5413 11 137 13 191 2879 46073 17 307 19 383 8053 177167 23 Example Execution #2: Enter data now: 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 Final prime data: 23 509 10691 213821 19 347 17 277 4157 58199 13 157 11 113 1019 8161 7 43 5 23 Example Execution #3 (values are all prime): Enter data now: 61 67 1 11 13 17 19 23 29 31 37 41 2 3 5 7 43 47 53 59 Final prime data: 61 67 1 11 13 17 19 23 29 31 37 41 2 3 5 7 43 47 53 59Explanation / Answer
#include <stdio.h>
#define true 1
#define false 0
int isPrime(int);
int getNextPrime(int);
void readInput(int [], int);
void genereateOuput(int [], int);
void printOutput(int [], int);
int main()
{
int n = 20;
int numbers[n];
readInput(numbers, n);
genereateOuput(numbers, n);
printOutput(numbers, n);
return 0;
}
// return true if number if prime, false otherwise
int isPrime(int n)
{
// Corner cases
if (n < 1) return false;
if (n == 1 || n == 2 || n == 3) return true;
// This is checked so that we can skip
// middle five numbers in below loop
if (n%2 == 0 || n%3 == 0) return false;
int i;
for (i=5; i*i<=n; i=i+6)
if (n%i == 0 || n%(i+2) == 0)
return false;
return true;
}
// function to get next prime of a given number. We know that next prime always lie between n and 2n
int getNextPrime(int n)
{
int i = n;
for (; i < 2 * n; ++i)
{
if (isPrime(i))
{
return i;
}
}
}
void readInput(int numbers[], int n)
{
printf("Enter data now: ");
int i = 0;
// store data read from user
for(i = 0; i < n; i++)
{
scanf("%d", &numbers[i]);
}
}
void genereateOuput(int numbers[], int n)
{
int i;
printf("Final prime data: ");
for(i = 0; i < n; i++)
{
if (! isPrime(numbers[i]))
{
int newN;
if (i == 0)
{
newN = numbers[i]*numbers[i] + 1;
}
else
{
newN = numbers[i]*numbers[i-1];
}
numbers[i] = getNextPrime(newN);
}
}
}
void printOutput(int numbers[], int n)
{
int i;
for(i = 0; i < n; i++)
{
printf("%d ", numbers[i]);
}
printf(" ");
}
Sample execution
Enter data now: 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
Final prime data: 17 5 31 7 59 541 5413 11 137 13 191 2879 46073 17 307 19 383 8053 177167 23
Enter data now: 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4
Final prime data: 23 509 10691 213821 19 347 17 277 4157 58199 13 157 11 113 1019 8161 7 43 5 23
Enter data now: 61 67 1 11 13 17 19 23 29 31 37 41 2 3 5 7 43 47 53 59
Final prime data: 61 67 1 11 13 17 19 23 29 31 37 41 2 3 5 7 43 47 53 59
Please rate positively if it answer your question. Please comment if something is not clear.
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.