iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 30
1

當我們需要使用亂數時,是不是都用以下方式呢?

int main(){
 int Ra;
 Ra=(rand()%100)+1;

 printf("Random : %d \n", Ra);
 return 0;
}

或是先宣告#include <time.h>
再使用以下程式呢?

int main(){
 int Ra;
 srand(time(NULL));
 Ra=(rand()%100)+1;
 printf("Random : %d \n", Ra);
 return 0;
}

===================分格線===================

可能大家都有很多方法去產生亂數
但大家有沒有想過你們所產生的亂數是真正的亂數嗎?

以上述程式碼為例,是利用時間才產生亂數,所以才需要宣告#include <time.h>
在需要夠亂的程式,可能會加入更多的因素,而影響輸出的數字。
例如:賭埸的百家樂(電子版),除了用時間作因子外,也可能加入觸碰螢幕的位置、人為的設定...等等

所以大家玩遊戲時,有聽某某人說:每分鐘的00秒時抽卡片,卡片會比較好。
或是:當有人抽到好卡片時,你也要馬上跟著抽,好運會滾滾來。
這證明它們的亂數,也並非真正的亂數。

可能你現在還是很疑惑,不就是亂數嗎?
我再舉一個例子:
在田莊中放一顆蘋果的種子,10年後,這個田莊可能會有很多顆樹,但這些樹都是蘋果樹
我們目前想要的是:在田莊中放一顆種子,10年後,田莊要長很多顆不同種類的樹

可能你會想,那你一開始就放多幾顆不同品種的種子。
這樣的做法,就好像在亂數中,參入更多的影響因子
這樣看似可行,但只要有人掌握了這些影響因子,這樣亂數就變成可預測的亂數了。

===================分格線===================

就為了亂數,需要搞那麼多東西嗎?
的確是需要的。
亂數可以幫助密碼學,來產生安全度更高、
對於賭場也幫助了不少

而且,也有不少人以「亂數」作為論文
論文名稱:真實亂數產生器之設計
網站:https://ndltd.ncl.edu.tw/cgi-bin/gs32/gsweb.cgi?o=dnclcdr&s=id=%22089NCTU0428044%22.&searchmode=basic

===================分格線===================

如果沒有「亂數」,或是「亂數」出錯,會怎樣?
其實在 2015 年,美國樂透彩爆出重大醜聞,該協會的安全主管 Eddie Tipton 傳出可以預測樂透獎開票結果,一年內可以有 3 天預測樂透數字,因此 Eddie Tipton 以及他的親友從 2005 年到 2011 年之間,在美國多州獲得金額不等的獎金,賺得了高額的意外之財。
新聞來源自:https://technews.tw/2017/06/23/us-lottery-security-director-cheat-500-million-could-face-25-years-in-prison/

(這時候,各位工程師是不是也在算台灣的樂透彩,看看是不是也會有3天的機會可以預測數字?
不要想太多了,這新聞的後部份是:彩票的亂數產生器遭人植入非官方程式碼,所以才可以得到樂透的結果。
大家不要知法犯法。

除了美國外,俄羅斯也有相關的新聞
https://www.cnread.news/content/6837113.html
利用逆向工程,分析老虎機所使用的演算法,推算何時按下按鈕來提高中獎的機會
(這是比較合法的方式去贏錢

===================分格線===================

論文題目除了為了學術研究外,更可以考慮如何運用在實際生活中。
這個時候大家是不是對「亂數」產生了不少的興趣?
今天是我30天鐵人賽的最後一天
先謝謝大家的支持


上一篇
[影像處理系列] 當模糊遇上細線化[3]結果分析
系列文
提神?看程式比喝咖啡更有效。30

1 則留言

0
SunAllen
iT邦高手 1 級 ‧ 2018-01-18 20:15:39

恭賀大大完賽!!

我要留言

立即登入留言