美文网首页
B1013 数素数 (20分)

B1013 数素数 (20分)

作者: km15 | 来源:发表于2020-02-10 16:34 被阅读0次

    /*
    题意::
    1、给出两个数(小于10的4次方),给出两个数之间的所有数字(两个数代表的是第几个素数
    输出要求,10个数字1行,其间空格,但是末尾不要空格

    解题:
    1、直接得出10的4次方以内的素数表
    2、然后枚举从N到M的素数
    3、一个计数count,是素数+1,每十个输出一个换行
    4、并且count小于10,也输出空格

    learn && wrong:
    1、运行窗口没关闭就再次编译也会这样,id blabla错误
    2、如果空格没法看清楚,可以换个符号,感叹号之类的
    3、用筛法或非晒法都行,但是加一个if(num >= n) break;更好
    4、下标从0开始,所有左端点应该是-1,而且题目说从N~M,所有右端点是闭的
    5、最重要是这个,count++余上10不等于0并且i < n,输出空格,不然输出换行符
    这一部实现了每十个一换行,10个以内有空格!

    6、重置count为0有个过不了,标准答案就全过了
    */

    #include <iostream>
    #include <cmath>
    using namespace std;
    
    const int maxn = 100100;
    //判断是否素数 
    bool isprime(int n){
        if(n <= 1) return false;
        int sqr = (int)sqrt(1.0 * n);
        for(int i = 2;i <= sqr;i++){
            if(n % i == 0) return false;
        }
        return true;    
    } 
    
    //素数表 
    int prime[maxn],num = 0;
    bool p[maxn] = {0};
    void find_prime(int n){
        for(int i = 2;i <= maxn;++i){
            if(isprime(i) == true){
                prime[num++] = i;
                p[i] = true;
                if(num >= n)
                 break;//!!!
            }
        } 
    }
    
    int main(int argc, char** argv) {
        int N,M;
    
        cin>>N>>M;
        find_prime(M);// 生成素数表
        
        int count = 0;  //计数的,判断输出空格还是换行 
        for(int i = N;i <= M;++i){  //!!!要求输出第几个,直接从prime计算就可以了啊~!我服了   !!!从0开始,记得减1 
            cout<<prime[i - 1];         //还有,输出N~M之间的素数,其实也好办呀,也是遍历,然后prime[i]>n && prime[i]<M就行了 
            count++;
            if(count % 10 != 0 && i < M) cout<<" ";
            else if(count == 10) {  //!!!这个会有一个过不了,原因不知道,标准答案全对
                cout<<endl;  
                count = 0; 
            } 
        }    
    
        return 0;
    }

    相关文章

      网友评论

          本文标题:B1013 数素数 (20分)

          本文链接:https://www.haomeiwen.com/subject/icqaxhtx.html