zoukankan      html  css  js  c++  java
  • HDOJ 1319 Prime Cuts<数论>

    学会了不难。通过这道题学习了两点:

    1:筛选法求素数。

    2:在写比较长的程序的时候,给每个功能部分加上注释,思路会更清晰。

    题意:

    1.题目中所说的素数并不是真正的素数,包括1;

    2.需要读懂题意,对于输入的n和c,如果1到n之间有偶数个素数则打印2c个数,奇数个素数则打印2c-1个数;

    3.打印的数是所有素数中位于中间位置的那些数。

    4.虽然数据量n<100.但是应确定第100+个素数是那个数,稍微把数组开大一些。

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    using namespace std;
    const int maxn=1050;
    bool isprime[maxn];
    int prime[200];
    //筛选法求素数
    void Erato()
    {
        isprime[0]=false;
        isprime[1]=true;
        isprime[2]=true;
        //初始化
        for(int i=3;i<maxn;i++){
            isprime[i++]=true;//奇数
            isprime[i]=false;//偶数
        }
        //判断素数
        int n=sqrt(maxn);
        for(int i=3;i<=n;i+=2)
            for(int j=i+i;j<maxn;j+=i)
                isprime[j]=false;
        //将素数方如prime中,包括1
        prime[0]=1;
        prime[1]=2;
        int j=2;
        for(int i=3;i<maxn;i+=2)
            if(isprime[i])
                prime[j++]=i;
    }
    int main ()
    {
        Erato();
        int n,c,count;
        int printcount,str,end;
        while(~scanf("%d%d",&n,&c))
        {
            printf("%d %d:", n, c);
            count=0;
            int i=0;
            //统计素数的个数
            while(prime[i++]<=n)
                count++;
            //统计要打印素数的个数
            if(count%2)
                printcount=2*c-1;
            else
                printcount=2*c;
            // 计算数据的起始与终止位置
            if(printcount>=count)
                str=0,end=count-1;
            else{
                str=(count-printcount)/2;
                end=str+printcount-1;
            }
            for(int i=str;i<=end;i++)
                printf(" %d",prime[i]);
            printf("
    
    ");
            
        }
        return 0;
    }


    想的太多,做的太少。
  • 相关阅读:
    HashMap源码分析
    LinkedList源码分析
    ArrayList源码学习
    Java容器知识总结
    Collections 工具类和 Arrays 工具类常见方法
    Java基础知识
    MySQL高级之索引优化分析
    MySQL命令大全
    Java IO
    SpringCloud笔记
  • 原文地址:https://www.cnblogs.com/pealicx/p/6115645.html
Copyright © 2011-2022 走看看