#include<stdio.h>
#include<time.h>
int main()
{
clock_t start;
double d;
long int n,i,j;
scanf("%ld",&n);
n=100000;
j=2;
start=clock();
printf("\n%ld",j);
for(j=3;j<=n;j+=2)
{
for(i=3;i*i<=j;i+=2)
if(j%i==0)
break;
if(i*i>j)
printf("\n%ld",j);
}
d=(clock()-start)/(double)CLOCKS_PER_SEC;
printf("\n%f",d);
}
上記のプログラムでn = 100000のとき、実行時間は0.015秒です。 私はCでシラバス・オブ・エラトステネスアルゴリズムを実装し、n = 100000の実行時間0.046を得ました。プログラムの時間複雑度
上記のアルゴリズムは、私が実装したSieveのアルゴリズムよりも高速です。
私の上記のプログラムの時間の複雑さは何ですか?
マイふるいの実装
#define LISTSIZE 100000 //Number of integers to sieve<br>
#include <stdio.h>
#include <math.h>
#include <time.h>
int main()
{
clock_t start;
double d;
long int list[LISTSIZE],i,j;
int listMax = (int)sqrt(LISTSIZE), primeEstimate = (int)(LISTSIZE/log(LISTSIZE));
for(int i=0; i < LISTSIZE; i++)
list[i] = i+2;
start=clock();
for(i=0; i < listMax; i++)
{
//If the entry has been set to 0 ('removed'), skip it
if(list[i] > 0)
{
//Remove all multiples of this prime
//Starting from the next entry in the list
//And going up in steps of size i
for(j = i+1; j < LISTSIZE; j++)
{
if((list[j] % list[i]) == 0)
list[j] = 0;
}
}
}
d=(clock()-start)/(double)CLOCKS_PER_SEC;
//Output the primes
int primesFound = 0;
for(int i=0; i < LISTSIZE; i++)
{
if(list[i] > 0)
{
primesFound++;
printf("%ld\n", list[i]);
}
}
printf("\n%f",d);
return 0;
}
2番目のforループに中括弧がないことは意図的ですか?どのようにあなたのコードをフォーマットするので、私たちはそれが何をすべきかを知っています。 –
はい2番目のforループには、その中に1つのステートメントが含まれているため、中括弧はありません。 上記のO(n^1.5)の時間の複雑さはありますか? –