How to resolve the algorithm AKS test for primes step by step in the C programming language

Published on 7 June 2024 03:52 AM
#C

How to resolve the algorithm AKS test for primes step by step in the C programming language

Table of Contents

Problem Statement

The AKS algorithm for testing whether a number is prime is a polynomial-time algorithm based on an elementary theorem about Pascal triangles. The theorem on which the test is based can be stated as follows: are divisible by

p

{\displaystyle p}

.

Using

p

3

{\displaystyle p=3}

:

And all the coefficients are divisible by 3,   so 3 is prime.

Let's start with the solution:

Step by Step solution about How to resolve the algorithm AKS test for primes step by step in the C programming language

The provided C code is designed to explore the binomial theorem, which allows us to expand expressions of the form (a+b)^n into a sum of terms. Specifically, this code focuses on the case where a=1 and b=-1, giving us the expansion of (1-1)^n, which simplifies to 1-1^n. It employs a recursive function called coef to calculate the coefficients of this expansion, and then uses these coefficients to check if a given number n is prime by using the primality test included in the function is_prime.

Here's a breakdown of the code:

  1. Binomial Expansion:

The binomial theorem states that: (a + b)^n = Summation from k=0 to n of nCk * a^(n-k) * b^k where nCk is the binomial coefficient, which can be calculated as nCk = n!/(k! * (n-k)!). In this code, we are interested in the special case where a=1 and b=-1, which gives us the expansion of (1-1)^n = 1-1^n.

  1. Calculating Coefficients:

The function coef is responsible for calculating the binomial coefficients for the expansion of (1-1)^n. It takes an integer n as input, where n represents the exponent in the expansion.

  • The function uses a recursive approach to calculate the coefficients. It initializes an array c of long long integers to store the coefficients.
  • The loop iterates over i from 0 to n-1. For each value of i, it calculates the coefficients for the terms x^i and x^(i+1) in the expansion. Specifically, it calculates c[i] = -c[i] and c[i+1] = 1.
  • After calculating the coefficients, the function adjusts c[0] by adding 1 and c[n] by subtracting 1. These adjustments are necessary for the primality test in the is_prime function.
  1. Primality Test:

The function is_prime checks if a given integer n is a prime number. It does this by using the coefficients calculated by the coef function.

  • The function first calls coef(n) to calculate the binomial coefficients for (1-1)^n.
  • Next, it adjusts c[0] by adding 1 and c[n] by subtracting 1, which is the same adjustment made in the coef function.
  • It then iterates through the coefficients from n down to 1, checking if each coefficient is divisible by n. If any coefficient is not divisible by n, the function returns false. Otherwise, it returns true, indicating that n is prime.
  1. Displaying Results:

The function show is used to display the coefficients of the expansion of (1-1)^n. It takes an integer n as input and prints the coefficients in the format:

+c[n]x^n + c[n-1]x^(n-1) + ... + c[1]x + c[0]

where c[i] represents the coefficient of the term x^i in the expansion.

  1. Main Function:

The main function is the entry point of the program. It demonstrates the use of the coef, is_prime, and show functions.

  • It first calculates and displays the expansion of (1-1)^n for n ranging from 0 to 9.
  • Next, it checks for prime numbers between 1 and 63 (the maximum value of n the program can handle) using the is_prime function and prints the prime numbers it finds.

The given source code is a snippet of C programming language that implements a polynomial evaluation. The polynomial is a mathematical expression that can be written as a sum of terms, where each term has a coefficient and a power of x. In the given snippet, the polynomial is represented as an array of coefficients, where c[0] is the constant term, c[1] is the coefficient of x, c[2] is the coefficient of x^2, and so on. The variable n is the degree of the polynomial, which is the highest power of x in the polynomial. The function evaluates the polynomial at a given value of x by multiplying each coefficient by the corresponding power of x and then adding the results together.

Here is a step-by-step explanation of the code:

  1. The function takes two arguments: an array of coefficients c and the degree of the polynomial n.
  2. It initializes a variable result to 0.
  3. It iterates through the coefficients from c[n] to c[0] using a for loop.
  4. For each coefficient, it multiplies the coefficient by the corresponding power of x and adds the result to result.
  5. The final value of result is the value of the polynomial at the given value of x.

Here is an example of how the function can be used:

#include <stdio.h>

int main() {
 // Coefficients of the polynomial
 int c[] = {1, 2, 3, 4, 5};
 // Degree of the polynomial
 int n = 4;
 // Value of x at which to evaluate the polynomial
 int x = 2;

 // Evaluate the polynomial
 int result = evaluate_polynomial(c, n, x);

 // Print the result
 printf("The value of the polynomial at x = %d is %d\n", x, result);

 return 0;
}

Output:

The value of the polynomial at x = 2 is 43

Source code in the c programming language

#include <stdio.h>
#include <stdlib.h>

long long c[100];

void coef(int n)
{
	int i, j;

	if (n < 0 || n > 63) abort(); // gracefully deal with range issue

	for (c[i=0] = 1; i < n; c[0] = -c[0], i++)
		for (c[1 + (j=i)] = 1; j > 0; j--)
			c[j] = c[j-1] - c[j];
}

int is_prime(int n)
{
	int i;

	coef(n);
	c[0] += 1, c[i=n] -= 1;
	while (i-- && !(c[i] % n));

	return i < 0;
}

void show(int n)
{
	do printf("%+lldx^%d", c[n], n); while (n--);
}

int main(void)
{
	int n;

	for (n = 0; n < 10; n++) {
		coef(n);
		printf("(x-1)^%d = ", n);
		show(n);
		putchar('\n');
	}

	printf("\nprimes (never mind the 1):");
	for (n = 1; n <= 63; n++)
		if (is_prime(n))
			printf(" %d", n);

	putchar('\n');
	return 0;
}


  

You may also check:How to resolve the algorithm Loops/Infinite step by step in the NS-HUBASIC programming language
You may also check:How to resolve the algorithm Pangram checker step by step in the FutureBasic programming language
You may also check:How to resolve the algorithm Van Eck sequence step by step in the Visual Basic .NET programming language
You may also check:How to resolve the algorithm Sorting algorithms/Bubble sort step by step in the M4 programming language
You may also check:How to resolve the algorithm Hofstadter-Conway $10,000 sequence step by step in the Fōrmulæ programming language