一道数论好题(math)

Time Limit:1000ms   Memory Limit:128MB

题目描述

rsy最近在研究欧几里得算法,不会的同学可以去看下课件以及代码……

现在她想到了一个新的问题,求k个数的最大公约数!

事实上这个问题仍然很简单。所以rsy想强化一下,她觉得最大公约数等于1就不是很有趣了。因此她想在n个数中找最多的数,使得它们的最大公约数不等于1。

现在rsy想知道,能找最多多少个数。

输入格式(math.in)

第一行一个数n。

第二行n个数ai。

输出格式(math.out)

一个数表示答案。

输入样例

5

2 3 4 5 6

输出样例

3

数据范围

对于30%的数据n<=5。

对于50%的数据n<=20。

对于80%的数据n<=1000,ai<=1000。

对于100%的数据1<=n<=100000,1<=ai<=100000,数据几乎是随机的。

对于这道题的爆0,我也非常无语,只有一个‘=’的问题,0分与90分,就是一个等号的区别,感觉好背,说一下错了哪里,看下面代码第25行

&&10行我定义的数组少了1,所以就死去了,不然就90分了,当然如果是随机数字,那么如果只找2的倍数,应该就能拿到不少分;看我打表;



 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<string>
 7
 8 using namespace std;
 9 const int N=100001;
10 const int chu[21]={0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,49,53,59,61,67};
11
12 int a[N];
13
14 int main()
15 {
16     freopen("math.in","r",stdin);
17     freopen("math.out","w",stdout);
18     int n;
19     scanf("%d",&n);
20     for(int i=1;i<=n;i++)
21     {
22         scanf("%d",&a[i]);
23     }
24     int ans,maxn=-1;
25     for(int i=1;i<=21;i++)
26     {
27         ans=0;
28         for(int j=1;j<=n;j++)
29         {
30             if(chu[i]<=a[j])
31             {
32                 if(a[j]%chu[i]==0)
33                  {
34                    ans++;
35                  }
36             }
37
38         }
39         if(ans>maxn)
40         {
41             maxn=ans;
42         }
43     }
44     printf("%d",maxn);
45     fclose(stdin);
46     fclose(stdout);
47 }

 

ac正解代码

 1 #include <cmath>
 2 #include <cstdio>
 3 #include <cstdlib>
 4 #include <iostream>
 5 #include <algorithm>
 6 using namespace std;
 7 int n,A,a[1000005],now,MAX,i,j;
 8 int main()
 9 {
10     freopen("math.in","r",stdin);
11     freopen("math.out","w",stdout);
12     scanf("%d",&n);
13     for (i=1; i<=n; i++)
14     {
15         scanf("%d",&A);
16         a[A]++;
17     }
18     for (i=2; i<=1000000; i++)
19     {
20         now=0;
21         for (j=i; j<=1000000; j+=i) now+=a[j];
22         MAX=max(MAX,now);
23     }
24     cout<<MAX;
25     return 0;
26 }

这道题也很水嘛,对于我的爆0,我也感觉非常不幸,也需经验问题吧

时间: 2024-11-08 02:26:40

一道数论好题(math)的相关文章

一道PK赛题

Problem Description I think that you might have played the traditional Chinese ring game: The Chinese Linking Rings (here we call its nickname Jiulianhuan —— “九连环”). Well, you say you haven’t played it before? Then you must have seen it before, right

数论 --- 简单题

吃糖果 Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 22376    Accepted Submission(s): 6396 Problem Description HOHO, 终于从Speakless手上赢走了所有的糖果,是Gardon吃糖果时有个特殊的癖好,就是不喜欢将一样的糖果放在一起吃,喜欢先吃一种,下一次吃另一 种,这样:

Nim Game,一个有趣的游戏,也是一道入门算法题。

Nim Game,其实很多人都玩过.其实就是我们玩的划线游戏. 一张纸上,画若干条线,双方一人划一次,每次划掉1~3条线.可以选择画1条,也可以划2条,也可以3条.具体划去几条线完全看自己的策略.谁划掉最后一条线,就是赢家. 如上图,蓝方获胜. 正在看这篇文章的你一定是一个聪明人,每一步都是最优解,而你的对手,也跟你一样聪明,每步都是最优的解法. 现在你作为先手,在线条总数为多少的时候,你必赢呢,又在多少的时候必输呢? 可不可以用一个函数来判断在线条总是为x时你的输赢情况呢?这样你以后跟别人玩这

BZOJ1968: [Ahoi2005]COMMON 约数研究(数论 水题)

Description Input 只有一行一个整数 N(0 < N < 1000000). Output 只有一行输出,为整数M,即f(1)到f(N)的累加和. Sample Input 3 Sample Output 5 Solve: 数论水题,求因数又不是质因数,所以,只要求出对于[1 , n]有多少个倍数,就表示[1 , n]中以i为因数的是哪些,加起来就可以了 Code: 1 #include <bits/stdc++.h> 2 using namespace std;

POJ 3358 Period of an Infinite Binary Expansion( 数论好题 + 欧拉定理 + 欧拉函数 )

POJ 3358 Period of an Infinite Binary Expansion( 数论好题 + 欧拉定理 + 欧拉函数 ) #include <cstdio> #include <cstring> #include <algorithm> #include <algorithm> using namespace std; typedef long long LL; LL fac[ 100000 ], pf; LL gcd( LL a, LL

分享一道数列证明题

两个整数数列a1,a2,…和b1,b2,….满足方程(an-an-1)(an-an-2)+(bn-bn-1)(bn-bn-2)=0,其中n=3,4,….证明存在正整数k使得ak=ak+2014. [解]设在平面直角坐标系下Pn(an,bn) 将(an-an-1)(an-an-2)+(bn-bn-1)(bn-bn-2)=0 写成 故点Pn在以Pn-1Pn-2为直径的圆上. 记dn=|PnPn+1|2=(an-an+1)2+(bn-bn+1)2. 则显然{dn}是整数列,且由点Pn在以Pn-1Pn-

数论十题

数论十题 Problem Zero:[neerc2011]Gcd guessing game 现在有一个数x,1 ≤ x≤ n,告诉你n,每次你可以猜一个数y,如果x==y则结束,否则返回gcd(x,y),问最少只要几次就可以保证猜出答案. 本题纯属娱乐.仅仅是一个GCD的游戏,跑题了. 因为本题要求最坏情况,我们直观地猜想就是每次返回都是1.由于答案有可能是质数,而判定一个数,必须要把含有这个质因子的数问一遍.于是,我们引出这样一个思路,将所有1-n的质数分组,每组的积<=n,答案就是组数.

uva 10006 数论入门题

这是一个入门的数论题目 , 只需要简单的找素数和快速幂取模 题意:输入一个数 n , 如果这个数是非素数 , 问是不是 这个2~n-1区间的所有数都满足 ? 解法:由于数据量不大 , 可以直接暴力求解 解法1: 暴力求解 #include <iostream> #include <string.h> #include <stdio.h> using namespace std; long long prime[65010]; long long n; void init

HDU 2674 N!Again (数论-水题)

N!Again Problem Description WhereIsHeroFrom:             Zty, what are you doing ? Zty:                                     I want to calculate N!...... WhereIsHeroFrom:             So easy! How big N is ? Zty:                                    1 <=