y²=x³+x+7 p=17 Q(1,3)为例:

public class test {

	private int X, Y;

	private int p = 17, k, a = 1, b = 7, x1 = 1, y1 = 3, modV;

	public int mod(int f) {
		int z = f / 17;
		int mo = f - (z * 17);
		if (mo >= 0)
			return mo;
		else
			return mo + p;
	}

	public int extendedEuclid(int e, int modValue) {
		int i;
		int over = e;
		for (i = 1; i < modValue;) {
			over = over % modValue;
			if (over == 1) {
				return i;
			} else {
				if (over + e <= modValue) {
					do {
						i++;
						over += e;
					} while (over + e <= modValue);
				} else {
					i++;
					over += e;
				}
			}
		}
		return 0;
	}

	public void dp(int x, int y, int times) {
		if (times >= 2) {
			//System.out.println("111");
			modV = extendedEuclid(2 * y, p);
			//System.out.println(modV);
			k = mod(((3 * x * x + a) * modV));
			X = mod(((k * k) - 2 * x));
			Y = mod((-y + k * (x - X)));
			x = X;
			y = Y;
		}
		for (int d = times - 2; d != 0; d--) {
			int m, n;
			modV = extendedEuclid(X - x1, p);
			//System.out.println(modV);
			k = mod((Y - y1) * modV);
			m = mod((k * k) - x1 - X);
			n = mod(((-y1) + (k * (x1 - m))));
			X = m;
			Y = n;
		}
		System.out.println(X + "," + Y);
		//System.out.println(k);

	}

	public static void main(String args[]) {
		test e1 = new test();
		e1.dp(1, 3, 2);
	}
}

——END——