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; }
没考虑例外情况