C言語で楕円曲線の勉強(2.C言語の剰余)

有限体Fp上での計算ではmod(剰余)がよく出てくる.
自然数a,bでのa mod bはそこまで難しくない.
 
しかしa,bの範囲が整数まで拡大すると話がややこしくなってくる.

例えば,-4 mod 3はC言語ではどうなるか.
実際に計算すると,-1という結果が出た.
一方で,Pythonでは2という出力結果になる.
このあたりの話は『負数の剰余を計算してはならない』が詳しく解説している.
Wikipediaの『剰余演算』,『除法』も参考になる.
 
有限体Fp上での計算を行いたいので,負の値は剰余の結果として好ましくない.
F_7での-4 mod 3であれば-1ではなく2(=-1+3)と出てほしい.
そのため,今後はC言語の%を使わずに以下の剰余関数を定義する.
 

int mod(int a,int b){
    return (a%=b)<0?a+b:a;
}