コードをリポジトリ
に移行します。
Mac では、Apple Clang で OpenMP を使用するために、Homebrew を使用して libomp をインストールする必要があります。
-
Homebrew をインストールしていない場合は、公式サイトの指示に従ってインストールしてください。
-
ターミナルを開いて、以下のコマンドを実行して
libompをインストールします。
brew install libompインストールが完了したら、言語に合わせてエイリアスを設定してください。
ステップ1:設定ファイル(.zshrc)を開く
ターミナルで以下のコマンドを入力して、設定ファイルをエディタで開きます。
nano ~/.zshrcステップ2:エイリアスを追記する
ファイルの末尾に、以下の 1行 をコピー&ペーストしてください。
alias gcc-omp='clang -O3 -Xpreprocessor -fopenmp -lomp -L/opt/homebrew/opt/libomp/lib -I/opt/homebrew/opt/libomp/include'clang: C用のコンパイラを指定。-Xpreprocessor -fopenmp: Apple Clang で OpenMP を有効にするためのフラグ。-lomp: libomp をリンク。-Iと-L: Homebrew でインストールした OpenMP の場所を明示。
ステップ3:保存して閉じる
保存: Control + O キーを押し、そのまま Enter を押します。
終了: Control + X キーを押してエディタを閉じます。
ステップ4:設定を現在のターミナルに反映させる
これを忘れると、まだエイリアスが使えません。
source ~/.zshrc動作確認:いざコンパイル!
これで準備完了です。以下のコマンドで、C コードをコンパイルしてみてください。
gcc-omp your_code.c -o your_programエラーが出ずに終了すれば成功です。あとは実行するだけです。
ステップ1:設定ファイル(.zshrc)を開く
ターミナルで以下のコマンドを入力して、設定ファイルをエディタで開きます。
nano ~/.zshrcステップ2:エイリアスを追記する
ファイルの末尾(または既存の gcc-omp の下)に、以下の 1行 をコピー&ペーストしてください。
alias g++-omp='clang++ -O3 -Xpreprocessor -fopenmp -std=c++17 -I/opt/homebrew/opt/libomp/include -L/opt/homebrew/opt/libomp/lib -lomp'clang++: C++用のコンパイラを指定。-std=c++17: C++17規格を使用(構造化束縛、if constexprなど C++17 以降の機能を有効にします)。-Xpreprocessor -fopenmp: Apple Clang で OpenMP を有効にするためのフラグ。-lomp: libomp をリンク。-Iと-L: Homebrew でインストールした OpenMP の場所を明示。
ステップ3:保存して閉じる
保存: Control + O キーを押し、そのまま Enter を押します。
終了: Control + X キーを押してエディタを閉じます。
ステップ4:設定を現在のターミナルに反映させる
これを忘れると、まだエイリアスが使えません。
source ~/.zshrc動作確認:いざコンパイル!
これで準備完了です。以下のコマンドで、C++ コードをコンパイルしてみてください。
g++-omp your_code.cpp -o your_programエラーが出ずに終了すれば成功です。あとは実行するだけです。
alias出力例
g++-omp='clang++ -O3 -Xpreprocessor -fopenmp -std=c++17 -I/opt/homebrew/opt/libomp/include -L/opt/homebrew/opt/libomp/lib -lomp'
gcc-omp='clang -O3 -Xpreprocessor -fopenmp -lomp -L/opt/homebrew/opt/libomp/lib -I/opt/homebrew/opt/libomp/include'gcc-omp / g++-omp は、OpenMP を使わない通常の C/C++ コードにも使用できます。
-fopenmp や -lomp などのフラグは OpenMP の機能を有効にするだけで、コード内で使っていなければ何もしないため、コンパイルエラーにはなりません。実行結果も通常のコンパイルと同じになります。
ただし、以下の点に注意してください。
| フラグ | 影響 |
|---|---|
-O3 |
最適化レベルが高くなる(デフォルトは -O0)。計算結果は同じだが実行速度が変わることがある。浮動小数点演算では稀に微妙な差が出ることも。 |
-lomp(libomp のリンク) |
OpenMP ランタイムが実行バイナリにリンクされる。動作に影響はないがバイナリサイズが若干大きくなる。 |
-std=c++17(C++ 用のみ) |
C++17 の機能が使えるようになる。古い規格のコードでも問題なく動く。 |
言語の仕様等はこちらのリポジトリで整理
https://github.com/manman4/lang/tree/main/PARI
my(N=66, x='x+O('x^N));
で計算結果がN個以上出ても、計算上余分な桁を用意しただけの場合があるので、余分な桁の分の計算結果は使わない。
my(N=20, x='x+O('x^N)); 2*((1-x)-sqrt((1-2*x+x^2+x^3)))/x^3
のように、割り算をすると想定した桁数に届かない時がある。
Vecについて
? f = 1+2*x+4*x^2;
? Vec(f)
%2 = [4, 2, 1]
? Vecrev(f)
%3 = [1, 2, 4]
? f = 1+2*x+4*x^2+x*O(x^2);
? Vec(f)
%5 = [1, 2, 4]
PROG
- G.f.:
\\ A338731
my(N=66, x='x+O('x^N)); concat([0, 0], Vec(sum(k=1, N, x^(k*(3*k+1)/2)/(1-x^k))))
- E.g.f.:
\\ A194689
my(N=66, x='x+O('x^N)); Vec(serlaplace(exp(2*(exp(x)-1-x))))
対話型のままだと出力先のpath名を具体的に書いていないと、意図せぬところに出力される。
よって対話型でなく、カレントディレクトリにおいてgpを叩くと、カレントディレクトリに出力される
% gp
GP/PARI CALCULATOR Version 2.17.3 (released)
arm64 running darwin (aarch64/GMP-6.3.0 kernel) 64-bit version
compiled: Nov 11 2025, Apple clang version 17.0.0 (clang-1700.4.4.1)
threading engine: pthread, nbthreads = 8
(readline v8.3 enabled, extended help enabled)
Copyright (C) 2000-2024 The PARI Group
PARI/GP is free software, covered by the GNU General Public License, and comes WITHOUT ANY
WARRANTY WHATSOEVER.
Type ? for help, \q to quit.
Type ?18 for how to get moral (and possibly technical) support.
parisize = 8000000, primelimit = 1048576, factorlimit = 1048576
? \r /Users/xxxx.gp
gp ファイル内でNを使わない方がいい。
よくターミナルでN=○○とするので、
gp ファイル内でそのNを使っていることを避けるため
ダメな例
parisize = 8000000, primelimit = 500000
? N=60;
? \r /Users/xxx/Desktop/printN.gp
60
?
- G.f.:
\\ \r
\\ Nは使わない
v(n)={x='x+O('x^(n+10)); ~ };
M=100;
v=v(M);
for(n=0, M, write("C:\\Users\\○○\\bXXXXXX.txt", n, " ", polcoef(v, n)));
- E.g.f.:
\\ \r
\\ Nは使わない
v(n)={x='x+O('x^(n+10)); serlaplace(~) };
M=100;
v=v(M);
for(n=0, M, write("C:\\Users\\○○\\bXXXXXX.txt", n, " ", polcoef(v, n)));
オンライン http://magma.maths.usyd.edu.au/calc/
言語の仕様等はこちらのリポジトリで整理
https://github.com/manman4/lang/tree/main/SageMath
言語の仕様等はこちらのリポジトリで整理
https://github.com/manman4/lang/tree/main/Singular
言語の仕様等はこちらのリポジトリで整理
https://github.com/manman4/lang/tree/main/Maxima