﻿ test propositions for n=4
```/*****************************************************************************/
/*									     */
/*  COUNT PAIRS OF CONSECUTIVE ROOTS OF THE CONGRUENCE X**((P-1)/N)=Y(MOD P) */
/*  06/01/07 (dkc)							     */
/*									     */
/*  This C program tests propositions for n=4.				     */
/*									     */
/*****************************************************************************/
#include <stdio.h>
#include <math.h>
#include "input.h"
unsigned int croots(unsigned int *input, unsigned int index, unsigned int n,
unsigned int *output);
unsigned int r[100000];
int main () {
unsigned int n=4;		 // n value
unsigned int h,i,sum,p,p1,pn,flag0,flag1,temp,count;
unsigned int s[14];
FILE *Outfp;
Outfp = fopen("out4.dat","w");
count=0;
for (h=0; h<insize; h++) {
if (p>40000) 		   // save execution time
break;
i=croots(input, h, n, s);	   // count consecutive roots of congruences
if (i==0)			   // continue if n does not divide p-1
continue;
if (i==2) {
printf(" error: bad primitive root \n");
break;
}
printf(" p=%d ",input[2*h]);
/***************************************************/
/* check if the sum of S[i] is equal to (p-1)/n-1  */
/***************************************************/
sum=0;
for (i=0; i<n; i++) {
sum=sum+s[i];
printf(" %d ",s[i]);
}
printf("\n");
p1=p-1;
pn=p1/n;
if (sum!=pn-1) {
printf(" error: incorrect sum \n");
break;
}
/********************************************************/
/*  check if s[1]-s[2]=s[2]-s[3] when (p-1)/n is even	*/
/********************************************************/
if (pn==(pn/2)*2) {
if ((s[0]-s[1])!=(s[1]-s[2])) {
printf(" error: differences not equal \n");
fprintf(Outfp," error: differences not equal \n");
}
}
/**********************************/
/*  check if s[1]=s[2]=s[3]=s[4]  */
/**********************************/
flag0=1;
for (i=1; i<n; i++) {
if (s[i]!=s[0])
flag0=0;
}
/***********************************/
/*  check if (p-1)/n is a square   */
/***********************************/
flag1=0;
temp=(unsigned int)(sqrt((double)pn)+0.01);
if (temp*temp==pn)
flag1=1;
/****************************************************************/
/*  check if (p-1)/n is an odd square when s[0]=s[1]=s[2]=s[3]	*/
/****************************************************************/
if (flag0==1) {
fprintf(Outfp," p=%d ",p);
for (i=0; i<n; i++)
fprintf(Outfp," %d ",s[i]);
fprintf(Outfp,"\n");
if ((flag1==0)||((pn/2)*2==pn)) {
fprintf(Outfp,"p=%d, error: (p-1)/n is not an odd square \n",p);
printf(" error: (p-1)/n is not an odd square \n");
}
}
/*****************************************************************/
/*  check if s[1]=s[2]=s[3]=s[4] when (p-1)/n is an odd square	 */
/*****************************************************************/
if (flag1==1) {
if ((pn/2)*2!=pn) {
if (flag0==0) {
fprintf(Outfp,"p=%d, error: unequal s values \n",p);
printf(" error: unequal s values \n");
}
}
}
/******************************/
/* count sums divisible by n  */
/******************************/
if ((pn-1)==((pn-1)/n)*n)
count=count+1;
}
fprintf(Outfp," count=%d \n",count);
fclose(Outfp);
return(0);
}
```