求救 C語言 如何計算質數間執行時間?

如題,老師出了一個課堂練習,是要找兩個質數,當前一個質數與後一個質數電腦搜尋時間超過3秒,便停止程式。(結果要列出質數與執行秒數)

目前打了這樣:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <float.h>

int main(){

int i,j;
clock_t t1,t2;
double t=(t2-t1)/CLOCKS_PER_SEC;
t1=clock();

for(i=2;t<3;i++){
bool flag=true;
for(j=2;j if(i%j==0){
flag=false;
break;
}
}
if(flag){
t2=clock();
printf("%d ",i);
printf("time:%lf secs\n",t);
}
}
}
結果:
求救 C語言 如何計算質數間執行時間?

找質數方法和計算時間的方法都是上網找的(因為我程式超爛的...),卻不知道怎麼應用,質數是找出來了,但是秒數卻一直都是0這樣無止盡跑下去...(我只截了一小段的圖),而且我輸出的格式也不對,應該是要:質數 質數 秒數 這樣,可是我試過printf("%d %d",i,i+1);也是跑出一樣的結果。

想請問高手們,我應該如何改才對呢?
先謝謝大家了
文章關鍵字
你的t完全沒更新過
只是原始值的t=t1-t2=0-0當然一直都是零
原來!謝謝提醒!! 自己一直沒注意到
int main(){

int i,j;
clock_t t,t1,t2;
t1=clock();

for(i=2;t<3;i++){
bool flag=true;

for(j=2;j if(i%j==0){
flag=false;
break;
}
}
if(flag){
t2=clock();
printf("%d ",i);
double t=(t2-t1)/CLOCKS_PER_SEC;
printf("time:%lf secs\n",t);
}
}
}
改成這樣了,結果變成
大概就是這樣 秒數是跑了但是很不精確(!?)
而且跑超過3秒也不停下來
abc阿囉哈 wrote:
原來!謝謝提醒!! (恕刪)

t1值還是沒有更新
t值都是1當然不會停下來
abc阿囉哈 wrote:
如題,老師出了一個課(恕刪)
要先記錄 開始的 系統時間
跑完 再取得一次...相減 才是正確值

Google... C 語言 取得 時間
看了下time.h的文檔
求t1和t2差要用difftime()或者要強制轉為double類型,不能直接減
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf

剛用online compiler跑了一下

到3十多萬運算時間還是0.001秒

你老師算3秒是在整人嗎? 不打算讓學生RUN code驗証嗎?

設0.003秒就停都算到四十三萬
!!!現在變這樣了!!!




應該只差要怎麼把質數兩排列出來...而已了 吧(?)
abc阿囉哈 wrote:
!!!現在變這樣了!(恕刪)

你忘了除clocks per sec

然後t1還是沒有更新
我把它改成time不是clock了,這樣還需要除clocks per sec嗎...?
還有可以請問怎麼更新t1嗎?
abc阿囉哈 wrote:
我把它改成time不(恕刪)

Time的話的確不用
但只精確到秒,因為是日期格式

T1不更新的話就永遠是i的for迴圏開始的時間

所以應該在找到質數,而j的for迴圈跑完的時候更新t1的值
關閉廣告
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!