我有一点(x,y),我想再加上一点。我只写公式,但我想得到功能:
struct point {
mpz_t x;
mpz_t y;
};
point my_func(mpz_t x, mpz_t y) {
/..../
//lambda
mpz_sub(a, Y, y);
mpz_sub(b, X, x);
mpz_invert(c, b, P);
mpz_mul(b, a, c);
mpz_mod(f, b, P);
//point x
mpz_mul(a, f, f);
mpz_sub(b, a, x);
mpz_sub(c, b, X);
mpz_mod(d, c, P);
//point y
mpz_sub(a, x, d);
mpz_mul(b, f, a);
mpz_sub(c, b, y);
mpz_mod(e, c, P);
return (x, y);
}
在我看来,这应该不难,但我整天都在开车。 点gp = {x,y}; 错误:必须使用括号括起来的初始化程序初始化数组
我只希望有一个点(x,y)来获得输出的下一个点。它不必是一个结构,我尝试了成对和元组,它仍然无济于事。
答案 0 :(得分:0)
真的,如果我只需要更改x和y的值,为什么还要打扰一下 void函数通过引用解决了这个问题,感谢有用的建议 此功能有效,需要RAM 600kb
void add(mpz_t& x, mpz_t& y, mpz_t& X, mpz_t& Y, mpz_t& P) {
mpz_t a, b, c, d, f;
mpz_inits(a, b, c, d, f, 0);
//lambda
mpz_sub(a, Y, y);
mpz_sub(b, X, x);
mpz_invert(c, b, P);
mpz_mul(b, a, c);
mpz_mod(f, b, P);
//point x
mpz_mul(a, f, f);
mpz_sub(b, a, x);
mpz_sub(c, b, X);
mpz_mod(d, c, P);
//point y
mpz_sub(a, x, d);
mpz_mul(b, f, a);
mpz_sub(c, b, y);
mpz_mod(f, c, P);
//set x, y
mpz_set(x, d);
mpz_set(y, f);
mpz_clears(a, b, c, d, f, nullptr);
}