[java] iterationer under algoritmberäkning.
Tjenare!
Sitter här glor på min kod och kan inte se vart det lilla felet uppstår, så jag tänkte att ett par extra ögon kan väl inte skada.
Har skrivit ett litet program som med Hjälp av "Euklides utvidgade algoritm" beräknar U*x+V*y=d, d=gcd(x,y). Denna fungerar som den ska.
Sedan ville jag utveckla programmet ett steg så att maximala antalet iterationer beräknas för en mängd tal.
ex.
maxIter(5) ska ta och utföra den ovanstående algoritmen för gcd(5,{4,3,2,1}) och kolla vilken av de kräver flest iterationer i Euklides utvidgade algoritm.
Problemet som uppstår är att antalet iterationer är fel av någon anledning och jag har stirrat mig blind utan någon som helst framgång...
tabell med förväntade värden.
min kod.
public class Euc
{
private static int counter=0;
private static int U[];
public static void main(String [] args)
{
//gcd(5,4);
//System.out.print("["+getU(0)+" , "+getU(1)+" , "+getU(2)+ "]");
maxIter(10);
System.out.print(getCounter());
}
public static void maxIter(int m)
{
for(int i=2;i<m-1;i++)
{
int newCounter=getCounter();
if(gcd(m,i)==1)
if(newCounter>getCounter())
setCounter(newCounter);
}
}
public static int gcd(int m, int a)
{
int counter=0;
int[] U = {a,1,0};
int[] V = {m,0, 1};
int[] Z = new int[3];
while (V[0] != 0)
{
int W = U[0]/V[0];
for (int i=0;i<U.length;i++)
{
Z[i]= U[i]-V[i]*W;
U[i]=V[i];
V[i]=Z[i];
}
counter++;
}
setU(U);
setCounter(counter);
return getU(2);
}
public static void setCounter(int c)
{
counter= c;
}
public static int getCounter()
{
return counter;
}
public static void setU(int u[])
{
U = u;
}
public static int getU(int i)
{
return U[i];
}
}
Tack på förhand!