回 帖 发 新 帖 刷新版面

主题:TJU1010

http://acm.tongji.edu.cn/people/ps/showproblem.php?problem_id=1010
这道题显示超时。
Program TJU1010;
Var
  i, j, m, n, count: Longint;
  flag: Boolean;
Begin
  Writeln;
  Count := 0;
  Repeat
  Read(m,n);
  For i:=m To n Do
    Begin
      Flag := true;
      For j:=2 To round (sqrt(i)) Do
        If i Mod j = 0
          Then flag := false;
      If flag
        Then
          count := count + 1;
    End;
  If m=1 then count := count - 1;
  Writeln(count);
  count := 0;
  Until (n<0) Or (m<0)
End.

回复列表 (共4个回复)

沙发

请问应如何改进?

板凳

你这个算法不超时才怪呢,他的数据范围如此大(0<M<N<1000000),就不能再使用你的这个传统方法了,应该使用筛法 + 位压缩 bool 数组。

3 楼

能不能说的详细一点呢?

4 楼

筛法!知道么?如果不知道就去网上搜集资料学习一下。另外因为一个字节是 8 位,用整整一个字节表示 1 和 0 太浪费了,所以用 8 个 true 与 false 共占一个字节

我来回复

您尚未登录,请登录后再回复。点此登录或注册