c语言程序设计求求求求求求求求求

题目描述

 

 

从键盘输入一个整数n(98000<=n<=100000),统计1至n范围内素数的个数。

 

质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。换句话说,只有两个正因数(1和自己)的自然数即为素数。比1大但不是素数的数称为合数。1和0既非素数也非合数。

 

输入

输入一个整数n(98000<=n<=100000)

输出素数的个数样例输入 Copy

100000

样例输出 Copy

9592

#include <stdio.h>
#include <stdlib.h>

/*
	求素数:只能被1和他本身整除的数(1除外) 
    98000<=n<=100000
		 
*/
int main(int argc, char *argv[]) {
	
	int i,j;
	int flag;//标识某个数是不是素数
	int cnt = 0;//统计素数的个数 
	//i代表2到100之间的数 
	for(i=98000;i<=100000;i++){ 
		//内循环判断i是不是素数 
		flag = 0;//默认i是素数
		for(j=2;j<10;j++){
			if((i!=j) && (i % j == 0)){
				flag = 1;//表示i不是素数 
				break;
			}
		} 
		if(flag==0){ //flag=0表示i是素数 
			//每行显示10个素数
			if((cnt!=0) && (cnt % 10 ==0)){
				printf("\n");
			} 
			cnt++;
			printf("%d\t",i);
		}
	} 
	
	return 0;
}

 

这是比较基础的东西,建议课下多多学习,下面是我的代码,但你要尽量把他变成自己的东西,下次遇到能写出来

参考代码如下:

#include <cstdio>
#include <cstring>
#include <set>
#include <algorithm>
#include <cmath>
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
const int maxn=1<<30;
const int SIZE=1e5+10;
const double pi=acos(-1);
using namespace std;
int prim[SIZE];
void get_prim(){
    memset(prim,0,sizeof(prim));
    for(LL i=2;i<SIZE;i++){
        if(!prim[i]){
            prim[++prim[0]]=i;
            for(LL j=i*i;j<SIZE;j+=i)
                prim[j]=1;
        }
    }
}
int main()
{
    get_prim();
    int n;
    scanf("%d",&n);
    int pos=lower_bound(prim+1,prim+prim[0],n)-prim;
    if(prim[pos]==n)printf("%d\n",pos);
    else printf("%d\n",pos-1);
    return 0;
}

 

void main()
{
    int i,j,count=0,n;
    while(1)
    {
        printf("请输入一个整数(98000-100000):");
        scanf("%d",&n);
        if(n>=98000 && n<100000)
            break;
        printf("整数范围无效\n");
    }
    for(int i=2;i<=n;i++)
    {
        bool bPrime = true;
        for(j=2;j<=i/2;j++)
        {
            if(i%j==0)
            {
                bPrime = false;
                break;
            }
        }
        if(bPrime)
            count++;
    }
    printf("%d",count);
}

 

 写个时间复杂度少的算法

#include <stdio.h>

int main() {
    int n,i,j,s=0;
    scanf("%d", &n);
    int a[n];
    for (i = 2; i <= n; i++) {
        for (j = 0; j < s; j++)
            if (i%a[j]==0)
                break;
        if (j==s)
        {
            a[s++] = i;
        }
    }
    printf("%d", s);
    return 0;
}

 

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632