1. 程式人生 > >JXNU acm選拔賽 最小的數

JXNU acm選拔賽 最小的數

包含 urn accept span pan space log class con

最小的數

Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 14 Accepted Submission(s) : 8

Font: Times New Roman | Verdana | Georgia

Font Size: ← →

Problem Description

定義一種正整數集合K,集合中有N個數,集合中元素Ki(1<=i<=N)是包含i個不同質因子的最小的數。因為Ki可能會很大,所以將集合中所有Ki對10^9+7取余。

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


 1 #include<iostream>
 2 #include<stdio.h>
 3 using namespace std;
 4 long long num[1005];//特別註意這個數組雖然要是取余的值,但是在求下一個數的時候可能會爆了int,比賽的時候就錯在這
5 int s[1005]; 6 bool su(int x){ 7 if(x==1) return true; 8 else if(x==2) return true; 9 else if(x%2==0) return false; 10 else { 11 for(int i=3;i*i<=x;i=i+2){ 12 if(x%i==0) return false; 13 } 14 return true; 15 } 16 } 17 int main() 18 { 19 int
t=1; 20 for(int i=1;t<=1005;i++) 21 if(su(i)) s[t++]=i; 22 num[1]=1; 23 for(int i=2;i<=1002;i++){ 24 num[i]=(num[i-1]*s[i])%1000000007;//這地方可能會爆 25 } 26 int n,q; 27 cin>>n>>q; 28 long long xx; 29 for(int i=0;i<q;i++) 30 { 31 scanf("%lld",&xx); 32 int x,flag=0; 33 x=xx%1000000007; 34 for(int j=1;j<=n;j++){ 35 if(x==num[j]){ 36 flag=1; 37 break; 38 } 39 } 40 if(flag) 41 cout<<"Yes"<<endl; 42 else 43 cout<<"No"<<endl; 44 } 45 return 0; 46 }



JXNU acm選拔賽 最小的數