lyc——2019.10.31

10:判决素数个数

总时间限制: 1000ms  内存限制: 65536kB
描述

输入两个整数X和Y,输出两者之间的素数个数(包括X和Y)。

输入
两个整数X和Y(1 <= X,Y <= 105)。
输出
输出一个整数,表示X,Y之间的素数个数(包括X和Y)。
样例输入:1 100   样例输出:25
#include<cstdio>
#include<algorithm>
using namespace std;
bool f[100005];
int main()
{
    int x, y, ans=0;
    scanf("%d%d", &x, &y);
    f[1] = 1;
    if(x == 1) x=2;
    if(x > y) swap(x, y);
    for(int i=2; i<=y; i++)
    {
        if(f[i] == 0)
        {
            for(int j=2; j*i<=y; j++)
            {
                f[j*i] = 1;
            }
        }
    }
    for(int i=x; i<=y; i++)
    {
        if(f[i] == 0) ans++;
    }
    printf("%d", ans);
    return 0;
}

#没有考虑y可能比x大,还有时间复杂度。

 

1752:鸡兔同笼

总时间限制: 1000ms  内存限制:65536kB
描述

一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外)。已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物。

输入
一行,一个正整数a (a < 32768)。
输出
一行,包含两个正整数,第一个是最少的动物数,第二个是最多的动物数,两个正整数用一个空格分开。
如果没有满足要求的答案,则输出两个0,中间用一个空格分开。
样例输入:20  样例输出:5 10
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
    int a, n, m, ma=32768;
    scanf("%d", &a);
    if(a%2 == 0)
    {
        for(int i=0; i<=a; i+=2)
        {
            n = i/2;
            if((a-i)%4 == 0)
            {
                m=(a-i)/4;
                ma = min(ma, n+m);
            }
        }
        printf("%d %d", ma, a/2);
    }
    else printf("0 0");
    return 0;
}

没考虑例外情况

posted @ 2019-10-31 20:21  orange_lyc  阅读(141)  评论(0编辑  收藏  举报