NC220829. 素数个数
描述
输入描述
输入第一行为一个正整数 t, 表示一共有 t 组数据,接下来 t 行,每行一个正整数 n。
输出描述
输出 t 行,每行一个整数表示 n 以内的素数个数。
示例1
输入:
4 5 10 20 100
输出:
3 4 8 25
Java 解法, 执行用时: 1206ms, 内存消耗: 13548K, 提交时间: 2023-03-21 20:05:20
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int t=sc.nextInt(); while(t-->0){ int n=sc.nextInt(); int cnt=0; for(int i=2;i<=n;i++) {int e=0; for(int j=2;j<i;j++) { if(i%j==0)e=1; } if(e==0)cnt++; }System.out.println(cnt); } } }
pypy3 解法, 执行用时: 128ms, 内存消耗: 29068K, 提交时间: 2023-07-10 23:32:01
from bisect import bisect from cmath import sqrt all = [] for i in range(2, 1000): flag = True j = 2 while j * j <= i: if i % j == 0: flag = False break j += 1 if flag: all.append(i) for _ in range(int(input())): n = int(input()) print(bisect(all, n))
C(clang11) 解法, 执行用时: 11ms, 内存消耗: 376K, 提交时间: 2021-04-10 14:31:41
#include<stdio.h> int isPrime(int x) { // if(x==1)return 0; for(int i=2;i*i<=x;i++) if(x%i==0) return 0; return 1; } int main(){ int t,x,sum; scanf("%d",&t); while(t--) { sum=0; scanf("%d",&x); for(int i=2;i<=x;i++) if(isPrime(i)) sum++; printf("%d\n",sum); } return 0; }
Python3(3.9) 解法, 执行用时: 56ms, 内存消耗: 6836K, 提交时间: 2021-04-10 14:21:15
def isPrime(x): if x<=1 : return 0 i=2 while i*i<=x: if x%i==0: return 0 i+=1 return 1 isprime=[isPrime(i) for i in range(1010)] t=int(input()) for i in range(t): n=int(input()) print(sum(isprime[1:n+1]))
C++(clang++ 11.0.1) 解法, 执行用时: 91ms, 内存消耗: 432K, 提交时间: 2023-08-10 10:52:49
#include <iostream> using namespace std; int main() { int t; cin>>t; while(t--) { int i,j,n,count=0; cin>>n; for(j=2; j<=n; j++) { for(i=2; i<j; i++) { if(j%i==0) break; } if (j==i) { count++; } } cout<<count<<endl; } return 0; }