zoukankan      html  css  js  c++  java
  • 数素数

    题目描述

    令Pi表示第i个素数。现任给两个正整数M <= N <= 10000,请输出PM到PN的所有素数。

    输入描述

    输入在一行中给出M和N,其间以空格分隔。

    输出描述

    输出从PM到PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。

    输入例子

    5 27

    输出例子

    11 13 17 19 23 29 31 37 41 43
    47 53 59 61 67 71 73 79 83 89
    97 101 103

    解题思路:

    1. 输入M、N,创建一个动态数组,分配(N-M+1)大小的数组
    2. 循环判断素数,用k=0表示不是素数,k=1表示素数
    3. 每确定一个素数就使用 l 计数一次,用来确定这是第几个素数,当M<=l<=N时,将该范围的素数存入数组中
    4. 遍历数组输出,初始化k=0,并用k计数输出的个数,当k能被10整除就换行

    正解:

    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    
    int main(){
    	int M,N,k,*p;
    	int i=2,l=1;
    	scanf("%d%d",&M,&N);
    	p = (int*)malloc((N-M+1)*(sizeof(int)));
    	while(l<=N){
    		k = 1;
    		for(int j=2;j<=sqrt(i);j++){
    			if(i%j==0)
    				k=0;
    		}
    		if(k==1){	//是素数 
    			if(l>=M&&l<=N)
    				p[l-M] = i;
    			l++;
    		}
    		
    		i++;
    	}
    	
    	k=0;
    	for(i=0;i<N-M;i++){
    		printf("%d ",p[i]);
    		k++;
    		if(k%10 == 0)
    			printf("
    ");
    	}
    	printf("%d",p[N-M]);
    	return 0;
    } 
    
  • 相关阅读:
    【AGC010E】Rearranging(博弈,图论,拓扑排序)
    【ARC074F】Lotus Leaves(最小割)
    【ARC069F】Flags(2-SAT,Tarjan,线段树优化建图)
    [CTS 2019] 氪金手游
    HDU
    LOJ
    LOJ
    [TJOI 2015] 概率论
    [AGC 018F] Two Trees
    LOJ
  • 原文地址:https://www.cnblogs.com/techgy/p/14352383.html
Copyright © 2011-2022 走看看