#include <stdio.h>
#include <time.h>
int main() {
double z = 0;
while(z<3){
int i = 1;int j;
enum boolean isprime;
enum boolean {false,true};
clock_t i,j;
double z;
i=clock();
j=clock();
isprime = true;
switch(i){
case 1 :
isprime =false;
break;
case 2 :
break;
default :
for(j=2;j<i;j++){
if((i%j)==0){
isprime = false;
break;
}
else;
}
z=(double)(j-i);
printf("Use Time:%f\n",(z/CLOCKS_PER_SEC));
}
}
}
我是這學期剛接觸到c語言的,還不是很熟悉,這是今天上課的題目,題目是打一個前一個質數與後一個質數之間需要3秒鐘時間去搜尋的程式碼。如果超過3秒鐘就會停下來,我打的這一些有些是課本裡的有些是查網路的,希望有人可以點出我哪邊有錯,哪邊需要改正或提醒我都可以。
上面跟下面各加一個```
就可以有這樣的效果,
這是程式碼
話說
int i = 1;int j;
clock_t i,j;
都是i跟j竟然不會報錯...
原本沒有報錯嗎?
他意思是你要把定義放在前面(其實可以放迴圈外面),
你把定義放後面他不知道那是甚麼意思.
enum的用法可以參考 列舉 (C++)
不過C++應該本來就有bool函數了...
然後我覺得先找本書來打基礎,
學習程式語言需要領悟的,
尤其是開始的時候.
我是剛開學才接觸到馬上就要出題目讓我們做所以會比較沒有相關知識 我也會借書增加一點基礎(;´༎ຶД༎ຶ`)但是我剛剛把enum放在while上面還是一樣原本的那幾個錯誤⋯
我現在不知道我打的那些程式碼的大概意思是對還是錯的 我目前的想法是先執行找質數的過程然後當2個質數中間的時間超過3秒就會停下來然後答案會印出2個質數還有花的時間
盡力惹~
#include <stdio.h>
#include <time.h>
int prime(int n) {
int i, flag = 1;
for(i = 2; i * i <= n; i++) {
if(!(n % i)) {
flag = 0;
break;
}
}
return flag;
}
int main() {
int a, b;
printf("請輸入兩個整數: ");
scanf("%d %d", a, b);
int start = clock();
prime(a); prime(b);
while (clock() < CLOCKS_PER_SEC * 3 - start) {}
printf("Use Time:%f\n", difftime(start, clock()));
return 0;
}
程式已經停止運作...
QRG%Vhah4A$@HKL
QAQ
改寫微甜的酸大大的程式如下
你自己手動去改5000000
和5000100
兩個數字(從1,100開始試)
一直改到那個時間有超過 3 秒為止就是答案
#include <stdio.h>
#include <time.h>
int prime(long int n) {
long int i, flag = 1;
for(i = 2; i * i <= n; i++) {
if(!(n % i)) {
flag = 0;
break;
}
}
return flag;
}
int main() {
long int n = 5000000;
long int previous_n;
clock_t start_t, end_t;
double diff_t = 0;
start_t = clock();
while ((n < 5000100)&&(diff_t < 3.0)) {
if (prime(n)>0) {
end_t = clock();
diff_t = (double)(end_t - start_t) / CLOCKS_PER_SEC;
// if (diff_t >= 3.0) {
printf("It cost %.5f seconds between finding prime %d and %d\n", diff_t, previous_n, n);
// }
start_t = clock();
previous_n = n;
} else {
// printf("%d is not prime.\n", n);
}
n++;
}
return 0;
}
我自己用了一點「偷吃步」
得到結果如下
後來又想到
題目只有「兩個質數」
沒有「兩個連續
質數」
那就改如下
#include <stdio.h>
#include <time.h>
int prime(long int n) {
long int i, flag = 1;
// for(i = 2; i * i <= n; i++) {
for(i = 2; i < n; i++) {
if(!(n % i)) {
flag = 0;
// break;
}
}
return flag;
}
int main() {
long int n = 1;
long int previous_n;
clock_t start_t, end_t;
double diff_t = 0;
start_t = clock();
while ((n < 60000)&&(diff_t < 3.0)) {
if (prime(n)>0) {
end_t = clock();
diff_t = (double)(end_t - start_t) / CLOCKS_PER_SEC;
if (diff_t >= 3.0) {
printf("It cost %.5f seconds between prime 1 and %d\n", diff_t, n);
}
// start_t = clock();
previous_n = n;
} else {
// printf("%d is not prime.\n", n);
}
n++;
}
return 0;
}