最小的数
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 29 Accepted Submission(s) : 16
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
Input
本题只有唯一一组测试数据,第一行给出N,q,表示K的个数以及q次询问。1<=N<=1000,q<=10^5.
接下来q行每行一个正整数(64位整数范围内),请判断其对10^9+7取余后,是否在集合K中。
Output
对于每次询问,根据题意输出Yes或No
Sample Input
3 3 2 6 33
Sample Output
Yes Yes No 这题并不难,可是一开始的数组被我开太大了,就没反应过来了,用一个 set就过了。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <set> 6 #include <algorithm> 7 #define ll long long int 8 #define Ma 1000000007 9 #define N 10005 10 using namespace std; 11 ll prime[N],p[N]; 12 int n,m,k=0; 13 set<ll> s; 14 void IsPrime() { 15 memset(prime, 0, sizeof(prime)); 16 prime[0] = prime[1] = 1; 17 for (int i = 2; i < N; i++){ 18 if (!prime[i]) { 19 p[++k] = i; 20 for (int j = 2; j * i < N; j++) 21 prime[i * j] = 1; 22 } 23 } 24 } 25 26 int main(){ 27 28 scanf("%d%d",&n,&m); 29 IsPrime(); 30 for(int i=1;i<=n;i++){ 31 ll ans=1; 32 for(int j=1;j<=i;j++){ 33 ans=p[j]*ans%Ma; 34 } 35 s.insert(ans); 36 } 37 while(m--){ 38 ll h; 39 scanf("%lld",&h); 40 41 if(s.count(h)){ 42 printf("Yes\n"); 43 }else{ 44 printf("No\n"); 45 } 46 } 47 return 0; 48 }
时间: 2024-10-18 08:30:59