dada的GCD ( jxnu acm新生选拔赛)

1007 dada的GCD,输入格式描述有误,已修正

dada的GCD

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

Font: Times New Roman | Verdana | Georgia

Font Size: ← →

Problem Description

C语言都学过了怎么计算两个数的最大公约数,而一段区间[L,R]的GCD即这段区间所有数的最大公约数。现在给你一串长度为n的序列,如果对于序列的任意子区间[L,R],都有这段区间的gcd>=2,那么这段序列就叫做dada的GCD序列。
n<=10^4
序列的每个数小于10^9

Input

第一行有一个整数t,代表t组数据
每组输入有一个正整数n,
随后一行n个正整数。

大量输入,使用cin的同学请关闭stdio同步

Output

如果是dada的GCD序列,就输出Yes,反之输出No

Sample Input

2
3
2 6 4
3
4 6 9

Sample Output

Yes
No

Author

Luke叶

Source

jxnu

思路:每次都求验证是否最大公约数是否大于等于2,如果是,输出"Yes",否则输出“No”

这题数据很水,暴力可以过的。

我当时觉得用gcd是不是会爆内存。于是选择暴力了。

暴力代码:

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<string.h>
 4 #include<algorithm>
 5 using namespace std;
 6 int a[100050];
 7 int s[1005];
 8 bool su(int x){
 9     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;
20     s[0]=2;
21     int t=1;
22     for(int i=3;t<1003;i++)
23         if(su(i)){
24             s[t]=i;
25             t++;
26         }
27     cin>>T;
28     while(T--)
29     {
30         int n;
31         scanf("%d",&n);
32         memset(a,0,sizeof(a));
33         for(int i=0;i<n;i++)
34             scanf("%d",&a[i]);
35         bool flag=false;
36         for(int i=0;i<t;i++)
37         {
38             int sum=0;
39             for(int j=0;j<n;j++){
40                 if(a[j]%s[i]==0){
41                     sum++;
42                 }
43             }
44             if(sum==n){
45                 flag=true;
46                 break;
47             }
48         }
49         if(flag) cout<<"Yes"<<endl;
50         else cout<<"No"<<endl;
51     }
52     return 0;
53 }

正版AC代码:

http://blog.csdn.net/xjh_shin/article/details/76303921

 1 #include <iostream>
 2 #include <cstring>
 3 #include <string>
 4 #include <queue>
 5 #include <vector>
 6 #include <map>
 7 #include <set>
 8 #include <stack>
 9 #include <cmath>
10 #include <cstdio>
11 #include <algorithm>
12 #define N 100010
13 #define M 1000000
14 #define LL __int64
15 #define inf 0x3f3f3f3f
16 #define lson l,mid,ans<<1
17 #define rson mid+1,r,ans<<1|1
18 using namespace std;
19 const LL mod = 1e9 + 7;
20 const double eps = 1e-9;
21 LL num[N];
22 LL gcd(LL a, LL b) {
23     return b == 0 ? a : gcd(b, a%b);
24 }
25 int main() {
26     cin.sync_with_stdio(false);
27     int n, T;
28     cin >> T;
29     while (T--) {
30         cin >> n;
31         for (int i = 0; i < n; i++) {
32             cin >> num[i];
33         }
34         if (n == 1) {
35             if (num[0] >= 2) {
36                 cout << "Yes" << endl;
37             }
38             else {
39                 cout << "No" << endl;
40             }
41         }
42         else {
43             LL ans = gcd(num[0], num[1]);
44             for (int i = 2; i < n; i++) {
45                 ans = gcd(ans, num[i]);
46             }
47             if (ans >= 2) {
48                 cout << "Yes" << endl;
49             }
50             else {
51                 cout << "No" << endl;
52             }
53         }
54     }
55     return 0;
56 }
时间: 2024-10-31 05:13:10

dada的GCD ( jxnu acm新生选拔赛)的相关文章

jxnu acm新生选拔赛

最小的数 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

JXNU 新生选拔赛

1001 最小的数 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submission(s) : 28   Accepted Submission(s) : 4 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description 定义一种正整数集合K,集合中有N个数,集合中元素Ki(1

dada的GCD

dada的GCD Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submission(s) : 18   Accepted Submission(s) : 12 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description C语言都学过了怎么计算两个数的最大公约数,而一段区间[L

记TJPUのACM新生赛——Stay young, stay simple

刚看完国家德比来写点什么吧...话说比赛挺无聊,光头也真是命硬. 2016-12-3,12:00-17:00,TJPUのACM新生赛如期举行. 总体来说这次比赛体验还是比我第一次进行5小时比赛的浙江理工大学新生邀请赛要舒服的多(那次浙理工OJ直接爆了...) 然后凭着运气好和各位大佬的不杀之恩混到了第一... 比赛情况大概是上面图片那样,其实写出的题都挺水的,后面的DFS.BFS以及贪心什么的我都没多想...反正不会写. 唯一值得记录的大概是D题,HDOJ上有(5979),是2016ACM/IC

JXNU acm选拔赛 壮壮的数组

壮壮的数组 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submission(s) : 18   Accepted Submission(s) : 8 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description A,B,C为三个元素个数为n的数组,A={a1,a2,a3...

JXNU acm选拔赛 最小的数

最小的数 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<

JXNU acm选拔赛 涛神的城堡

涛神的城堡 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submission(s) : 42   Accepted Submission(s) : 8 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description 涛神有一个城堡给游客参观,涛神特别的强壮,涛神的强壮值是stro

JXNU acm选拔赛 涛涛的Party

涛涛的Party Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submission(s) : 21   Accepted Submission(s) : 8 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description 涛神因为极强,并且特别帅,所以拥有很多美女的联系方式,每个

2019 年「计算机科学与工程学院」新生赛 暨ACM集训队选拔赛 # 1

T1 请问这还是纸牌游戏吗 https://scut.online/p/567 这道题正解据说是方根 这里先放着等以后填坑吧qwq 但是由于这道题数据是随机的 所以其实是有各种水法的(但是我比赛根本没有想到任何水法qwq 第一种水法呢 因为数据随机 所以当数据大小变得比较大的时候 基本乘出来的数已经能覆盖1到P-1了 所以我们直接输出1和P-1就可以了 而数据比较小的时候就可以暴力计算了qwq include<cstdio> #include<cstring> #include&l