最开始因为计数的k,处理不当,始终得不到想要的数据,后来k的位置处理好了,中间的for循环是这样的
for(j=2;j<=i/2;j++) { if(i%j==0){ k++; break; } }效率不够;后来在网上找了一下,发现大家都开平方
因为:如果a*b=n的话,那么最大情况就是a=b了,所以要对n开平方
第一种,普通的用开平方来计算
```
#include "stdio.h" #include "math.h" /* 求n以内的素数 */ int main(){ int i,j,n,k,p=0; scanf("%d", &n); for (i=2;i<=n;i++){ k=0; for(j=2;j<=sqrt(i);j++) { if(i%j==0){ k++; break; } } if (k==0) { printf("%d,",i); p++; continue; } } printf("\n",p); printf("p=%d\n",p); }```
第二种方法,排除法,尚未优化
```
#include "stdio.h" #include "math.h" /* 求n以内的素数 */ int main(){ printf(" 请输入1--10000的数字:\n"); int n, i, j; int a[10001]; scanf("%d",&n); for (i=0; i<n; i++) { a[i] = 1; } printf(" %d 包含的素数有: ", n); for (i=2; i<=n; i++) { if (a[i]==1) { printf("%d ",i); for (j=2*i; j<=n; j=j+i) a[j] = 0; } } return 0; }```
第二种方法