#include<stdio.h>#include<math.h>constintMAX_SIZE=1000;boolmask0[MAX_SIZE],mask1[MAX_SIZE];voidmaskStep(intstep,intn){inti=step;while(i<n){mask0[i]=true;i+=step;}}voidfactor(constintn){intx=n;for(inti=0;i<x;i++)mask0[i]=false;mask0[0]=true;inti,e;i=2;e=(int)sqrt(x);while(i<=e){while((x%i)==0){x/=i;e=(int)sqrt(x);maskStep(i,n);}i++;}if(x>1)maskStep(x,n);}voidpowers(intn,inta){printf("%d): ",a);intrest=1;intprev=0;intk=0;for(inti=0;i<n;i++)mask1[i]=false;while(true){rest=(rest*a)%n;if(mask1[rest])break;printf("%d ",rest);mask1[rest]=true;k++;prev=rest;}if(prev==1)printf("// rząd %d\n",k);elseprintf("// %d nie względnie pierwsze z %d\n",a,n);}voidorders(intn){factor(n);printf("%d:\n",n);intncoprimes=0;for(inti=0;i<n;i++)if(mask0[i])ncoprimes++;for(inta=0;a<n;a++){powers(n,a);intcoprimes=0;for(inti=0;i<n;i++)if(!mask0[i]&mask1[i])coprimes++;if(coprimes+ncoprimes==n)printf("powyzszy to pierwiastek pierwotny\n");}}