zoukankan      html  css  js  c++  java
  • 素数牛客网[求大数内所有素数]

    题目描述

    输入一个整数n(2<=n<=10000),要求输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数,如果没有则输出-1。

    输入描述:

    输入有多组数据。
    每组一行,输入n。

    输出描述:

    输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数(素数之间用空格隔开,最后一个素数后面没有空格),如果没有则输出-1。
    示例1

    输入

    复制
    100
    

    输出

    复制
    11 31 41 61 71
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<stdlib.h>
    #include<algorithm>
    using namespace std;
    bool a[10010]= {0};
    int b[10000];
    int x=0;
    void prime(int n)//如何求大数内的素数。
    {
        for(int i=2; i<n; i++)
        {
            if(a[i])continue;//标记为true表示不是素数。是合数。
            b[x++]=i;
            for(int j=i*i; j<n; j+=i)
                a[j]=true;
        }
    }
    int main()
    {
        int n;
        cin>>n;
        prime(n);
        int ct=0;
        for(int i=0; i<x; i++)
        {
            if(b[i]%10==1)
                ct++;
        }
        if(ct==0)
            cout<<-1;
        else
        {
            for(int i=0; i<x; i++)
            {
                if(b[i]%10==1)
                {
                    cout<<b[i];
                    ct--;
                    if(ct!=0)
                        cout<<' ';
                }
    
            }
        }
    
        return 0;
    }

    //这个题真的是简单的,但是求素数的时候我还是遇到了一个小问题,就是第二层循环,应该是从i*i那个地方开始开始标记,并且j+=i这样,比i*2开始快了2ms,求素数,如果是合数则被标记为true;

    2018-9-9更:

    1.考点就是如何求大数内的所有素数,不是一个一个去遍历求解,那样一定会超时,

    2.而是使用了两个数组,标记是否是素数,并且将从i*i都一起标记为不是素数。

    //学习了!

  • 相关阅读:
    生成唯一流水码
    搜索类
    数字转中文
    字符串转数组工具类
    类转换
    P1112 区间连续段
    P1113 同颜色询问
    Turtlebot3 机器学习
    Turtlebot2进阶教程
    turtlebot A2
  • 原文地址:https://www.cnblogs.com/BlueBlueSea/p/9277391.html
Copyright © 2011-2022 走看看