🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

1回答

1509閲覧

KotlinでのAndroidアプリ開発においてメルセンヌツイスターを使いたい

pontyo

総合スコア13

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2019/12/30 19:25

現在IntelliJ IDEAにてKotlinを使ってAndroidアプリを開発しています。
ここで以下ページにてダウンロードできるSfmt.javaのコードを利用してメルセンヌツイスターを使用したいです。

どのようにすれば導入できるのか教えていただきたいです。
以下のSfmt.javaをMainActivity.ktに導入したいです。

java

1/* 2Sfmt.java 乱数ライブラリ(11213) 3coded by isaku@pb4.so-net.ne.jp 4*/ 5 6class Sfmt 7{ 8 int index; 9 int coin_bits; /* NextBit での残りのビット */ 10 int coin_save; /* NextBit での値保持 */ 11 int byte_pos; /* NextByte で使用したバイト数 */ 12 int byte_save; /* NextByte での値保持 */ 13 int range; /* NextIntEx で前回の範囲 */ 14 int base; /* NextIntEx で前回の基準値 */ 15 int shift; /* NextIntEx で前回のシフト数 */ 16 int normal_sw; /* NextNormal で残りを持っている */ 17 double normal_save; /* NextNormal の残りの値 */ 18 protected int[]x=new int[352]; /* 状態テーブル */ 19 20 protected int[]GetParity() 21 { return new int[]{ 0x00000001,0x00000000,0xe8148000,0xd0c7afa3 }; } 22 23 public String IdString() { 24 return"SFMT-11213:68-14-3-7-3:effff7fb-ffffffef-dfdfbfff-7fffdbfd"; 25 } 26 27 public void gen_rand_all() { 28 int a=0,b=272,c=344,d=348,y; int[]p=x; 29 30 do { 31 y=p[a+3]^(p[a+3]<<24)^(p[a+2]>>>8)^((p[b+3]>>>7)&0x7fffdbfd); 32 p[a+3]=y^(p[c+3]>>>24)^(p[d+3]<<14); 33 y=p[a+2]^(p[a+2]<<24)^(p[a+1]>>>8)^((p[b+2]>>>7)&0xdfdfbfff); 34 p[a+2]=y^((p[c+2]>>>24)|(p[c+3]<<8))^(p[d+2]<<14); 35 y=p[a+1]^(p[a+1]<<24)^(p[a]>>>8)^((p[b+1]>>>7)&0xffffffef); 36 p[a+1]=y^((p[c+1]>>>24)|(p[c+2]<<8))^(p[d+1]<<14); 37 y=p[a]^(p[a]<<24)^((p[b]>>>7)&0xeffff7fb); 38 p[a]=y^((p[c]>>>24)|(p[c+1]<<8))^(p[d]<<14); 39 c=d; d=a; a+=4; b+=4; 40 if (b==352) b=0; 41 } while (a!=352); 42 } 43 44 void period_certification() { 45 int work,inner=0; int i,j; int[] parity=GetParity(); 46 47 index=352; range=0; normal_sw=0; coin_bits=0; byte_pos=0; 48 for (i=0;i<4;i++) inner^=x[i]&parity[i]; 49 for (i=16;i>0;i>>>=1) inner^=inner>>>i; 50 inner&=1; 51 if (inner==1) return; 52 for (i=0;i<4;i++) for (j=0,work=1;j<32;j++,work<<=1) 53 if ((work&parity[i])!=0) { x[i]^=work; return; } 54 } 55 56 /* 整数の種 s による初期化 */ 57 /*synchronized*/ public void InitMt(int s) { 58 x[0]=s; 59 for (int p=1;p<352;p++) 60 x[p]=s=1812433253*(s^(s>>>30))+p; 61 period_certification(); 62 } 63 64 Sfmt(int s) { InitMt(s); } 65 66 /* 配列 init_key による初期化 */ 67 /*synchronized*/ public void InitMtEx(int[]init_key) { 68 int r,i,j,c,key_len=init_key.length; 69 70 for (i=0;i<352;i++) x[i]=0x8b8b8b8b; 71 if (key_len+1>352) c=key_len+1; else c=352; 72 r=x[0]^x[172]^x[351]; r=(r^(r>>>27))*1664525; 73 x[172]+=r; r+=key_len; x[179]+=r; x[0]=r; c--; 74 for (i=1,j=0;j<c&&j<key_len;j++) { 75 r=x[i]^x[(i+172)%352]^x[(i+351)%352]; 76 r=(r^(r>>>27))*1664525; x[(i+172)%352]+=r; 77 r+=init_key[j]+i; x[(i+179)%352]+=r; 78 x[i]=r; i=(i+1)%352; 79 } 80 for (;j<c;j++) { 81 r=x[i]^x[(i+172)%352]^x[(i+351)%352]; 82 r=(r^(r>>>27))*1664525; x[(i+172)%352]+=r; r+=i; 83 x[(i+179)%352]+=r; x[i]=r; i=(i+1)%352; 84 } 85 for (j=0;j<352;j++) { 86 r=x[i]+x[(i+172)%352]+x[(i+351)%352]; 87 r=(r^(r>>>27))*1566083941; x[(i+172)%352]^=r; 88 r-=i; x[(i+179)%352]^=r; x[i]=r; i=(i+1)%352; 89 } 90 period_certification(); 91 } 92 93 Sfmt(int[]init_key) { InitMtEx(init_key); } 94 95 /* 32ビット符号あり整数の乱数 */ 96 /*synchronized*/ public int NextMt() { 97 if (index==352) { gen_rand_all(); index=0; } 98 return x[index++]; 99 } 100 101 /* 0以上 n 未満の整数乱数 */ 102 public int NextInt(int n) { 103 double z=NextMt(); 104 if (z<0) z+=4294967296.0; 105 return(int)(n*(1.0/4294967296.0)*z); 106 } 107 108 /* 0以上1未満の乱数(53bit精度) */ 109 public double NextUnif() { 110 double z=NextMt()>>>11,y=NextMt(); 111 if (y<0) y+=4294967296.0; 112 return(y*2097152.0+z)*(1.0/9007199254740992.0); 113 } 114 115 /* 0か1を返す乱数 */ 116 /*synchronized*/ public int NextBit() { 117 if (--coin_bits==-1) 118 { coin_bits=31; return(coin_save=NextMt())&1; } 119 else return(coin_save>>>=1)&1; 120 } 121 122 /* 0から255を返す乱数 */ 123 /*synchronized*/ public int NextByte() { 124 if (--byte_pos==-1) 125 { byte_pos=3; return(int)(byte_save=NextMt())&255; } 126 else return(int)(byte_save>>>=8)&255; 127 } 128 129 /* 丸め誤差のない0以上 range_ 未満の整数乱数 */ 130 /*synchronized*/ public int NextIntEx(int range_) { 131 int y_,base_,remain_; int shift_; 132 133 if (range_<=0) return 0; 134 if (range_!=range) { 135 base=(range=range_); 136 for (shift=0;base<=(1<<30)&&base!=1<<31;shift++) base<<=1; 137 } 138 for (;;) { 139 y_=NextMt()>>>1; 140 if (y_<base||base==1<<31) return(int)(y_>>>shift); 141 base_=base; shift_=shift; y_-=base_; 142 remain_=(1<<31)-base_; 143 for (;remain_>=(int)range_;remain_-=base_) { 144 for (;base_>remain_;base_>>>=1) shift_--; 145 if (y_<base_) return(int)(y_>>>shift_); 146 else y_-=base_; 147 } 148 } 149 } 150 151 /* 自由度νのカイ2乗分布 */ 152 public double NextChisq(double n) 153 { return 2*NextGamma(0.5*n); } 154 155 /* パラメータaのガンマ分布 */ 156 public double NextGamma(double a) { 157 double t,u,X,y; 158 if (a>1) { 159 t=Math.sqrt(2*a-1); 160 do { 161 do { 162 do { 163 X=1-NextUnif(); 164 y=2*NextUnif()-1; 165 } while (X*X+y*y>1); 166 y/=X; X=t*y+a-1; 167 } while (X<=0); 168 u=(a-1)*Math.log(X/(a-1))-t*y; 169 } while (u<-50||NextUnif()>(1+y*y)*Math.exp(u)); 170 } else { 171 t=2.718281828459045235/(a+2.718281828459045235); 172 do { 173 if (NextUnif()<t) { 174 X=Math.pow(NextUnif(),1/a); y=Math.exp(-X); 175 } else { 176 X=1-Math.log(1-NextUnif()); y=Math.pow(X,a-1); 177 } 178 } while (NextUnif()>=y); 179 } 180 return X; 181 } 182 183 /* 確率Pの幾何分布 */ 184 public int NextGeometric(double p) 185 { return(int)Math.ceil(Math.log(1.0-NextUnif())/Math.log(1-p)); } 186 187 /* 三角分布 */ 188 public double NextTriangle() 189 { double a=NextUnif(),b=NextUnif(); return a-b; } 190 191 /* 平均1の指数分布 */ 192 public double NextExp() 193 { return-Math.log(1-NextUnif()); } 194 195 /* 標準正規分布(最大8.57σ) */ 196 /*synchronized*/ public double NextNormal() 197 { 198 if (normal_sw==0) { 199 double t=Math.sqrt(-2*Math.log(1.0-NextUnif())); 200 double u=3.141592653589793*2*NextUnif(); 201 normal_save=t*Math.sin(u); normal_sw=1; 202 return t*Math.cos(u); 203 }else{ normal_sw=0; return normal_save; } 204 } 205 206 /* N次元のランダム単位ベクトル */ 207 public double[]NextUnitVect(int n) { 208 int i; double r=0; double[]v=new double[n]; 209 for (i=0;i<n;i++) { v[i]=NextNormal(); r+=v[i]*v[i]; } 210 if (r==0.0) r=1.0; 211 r=Math.sqrt(r); 212 for (i=0;i<n;i++) v[i]/=r; 213 return v; 214 } 215 216 /* パラメータN,Pの2項分布 */ 217 public int NextBinomial(int n,double p) { 218 int i,r=0; 219 for (i=0;i<n;i++) if (NextUnif()<p) r++; 220 return r; 221 } 222 223 /* 相関係数Rの2変量正規分布 */ 224 public double[]NextBinormal(double r) { 225 double r1,r2,s; 226 do { 227 r1=2*NextUnif()-1; 228 r2=2*NextUnif()-1; 229 s=r1*r1+r2*r2; 230 } while (s>1||s==0); 231 s= -Math.log(s)/s; r1=Math.sqrt((1+r)*s)*r1; 232 r2=Math.sqrt((1-r)*s)*r2; 233 return new double[]{r1+r2,r1-r2}; 234 } 235 236 /* パラメータA,Bのベータ分布 */ 237 public double NextBeta(double a,double b) { 238 double temp=NextGamma(a); 239 return temp/(temp+NextGamma(b)); 240 } 241 242 /* パラメータNの累乗分布 */ 243 public double NextPower(double n) 244 { return Math.pow(NextUnif(),1.0/(n+1)); } 245 246 /* ロジスティック分布 */ 247 public double NextLogistic() { 248 double r; 249 do r=NextUnif(); while (r==0); 250 return Math.log(r/(1-r)); 251 } 252 253 /* コーシー分布 */ 254 public double NextCauchy() { 255 double x,y; 256 do { x=1-NextUnif(); y=2*NextUnif()-1; } 257 while (x*x+y*y>1); 258 return y/x; 259 } 260 261 /* 自由度 n1,n2 のF分布 */ 262 public double NextFDist(double n1,double n2) { 263 double nc1=NextChisq(n1),nc2=NextChisq(n2); 264 return (nc1*n2)/(nc2*n1); 265 } 266 267 /* 平均λのポアソン分布 */ 268 public int NextPoisson(double lambda) { 269 int k; lambda=Math.exp(lambda)*NextUnif(); 270 for (k=0;lambda>1;k++) lambda*=NextUnif(); 271 return k; 272 } 273 274 /* 自由度Nのt分布 */ 275 public double NextTDist(double n) { 276 double a,b,c; 277 if (n<=2) { 278 do a=NextChisq(n); while (a==0); 279 return NextNormal()/Math.sqrt(a/n); 280 } 281 do { 282 a=NextNormal(); b=a*a/(n-2); 283 c=Math.log(1-NextUnif())/(1-0.5*n); 284 } while (Math.exp(-b-c)>1-b); 285 return a/Math.sqrt((1-2.0/n)*(1-b)); 286 } 287 288 /* パラメータαのワイブル分布 */ 289 public double NextWeibull(double alpha) 290 { return Math.pow(-Math.log(1-NextUnif()),1/alpha); } 291} 292

kotlin

1package com.example.myapplication 2 3import androidx.appcompat.app.AppCompatActivity 4import android.os.Bundle 5 6class MainActivity : AppCompatActivity() { 7 8 override fun onCreate(savedInstanceState: Bundle?) { 9 super.onCreate(savedInstanceState) 10 setContentView(R.layout.activity_main) 11 12 13 } 14} 15

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Android での Kotlin の使用に関するよくある質問
を参考にされては如何でしょうか.

投稿2019/12/31 01:30

jimbe

総合スコア13202

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問