題目是找到2個質數中間尋找時間為3秒左右的質數,最後要將2個質數都印出來。
有人可以幫我看一下有符合題目嗎 下面的是執行出來的ERROR我也不是很懂
#include <stdio.h>
#include <time.h>
int main() {
enum boolean isprime;
enum boolean {false,true};
double z = 0;
while(z<3){
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));
}
}
}
改寫微甜的酸大大的程式如下
你自己手動去改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;
}
我自己用了一點「偷吃步」
得到結果如下
但是我執行之後出現的都是0.000000秒
感謝海綿大的指正OuO
但是我執行之後出現的都是0.000000秒
原郥上數字越大,時間越長
你要自己去試
我也是試了很久才試出 5000000 那個數字
再提醒一點
老師出這個題目是沒有標準答案的
不同的程式,在不同的電腦,就會有不同的答案
感謝海綿大的指正OuO
不敢
沒有先徵得您的同意就引用您的程式碼
請多包涵
後來又想到
題目只有「兩個質數」
沒有「兩個連續
質數」
那就改如下
#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;
}
基本上是這樣,但我的電腦跑不出答案。搜尋時間相隔3秒的連續質數,它們相差至少3700000以上。(搜尋時間相隔18毫秒以上的連續質數,我的電腦花了4~166秒才找出來...XD)
#include <stdio.h>
#include <time.h>
int prime(long int n){
for (long int i=2; i*i<=n; i++){
if (n % i == 0)
return 0;
}
return 1;
}
int next_prime(long int n, clock_t *end_t){
n += 1 + n%2;
while (prime(n)==0){
n += 2;
}
*end_t = clock();
return n;
}
int main(){
long int i,a=2,previous_prime,np;
clock_t start_t,end_t;
for (i=a-1;i++;){
if (prime(i)){
start_t = clock()+3*CLOCKS_PER_SEC;
previous_prime = i;
np = next_prime(i,&end_t);
if (end_t >= start_t){
printf("%ld %ld",previous_prime,np);
break;
}
}
}
}