Consider all integer combinations of ab for 2 a 5 and 2 b 5:
22=4, 23=8, 24=16, 25=32
32=9, 33=27, 34=81, 35=243
42=16, 43=64, 44=256, 45=1024
52=25, 53=125, 54=625, 55=3125
If they are then placed in numerical order, with any repeats removed, we get the following sequence of 15 distinct terms:
4, 8, 9, 16, 25, 27, 32, 64, 81, 125, 243, 256, 625, 1024, 3125
How many distinct terms are in the sequence generated by ab for 2 a 100 and 2 b 100?
题目大意:
考虑 ab 在 2 a 5,2 b 5下的所有整数组合:
22=4, 23=8, 24=16, 25=32
32=9, 33=27, 34=81, 35=243
42=16, 43=64, 44=256, 45=1024
52=25, 53=125, 54=625, 55=3125
如果将这些数字排序,并去除重复的,我们得到如下15个数字的序列:
4, 8, 9, 16, 25, 27, 32, 64, 81, 125, 243, 256, 625, 1024, 3125
ab 在 2 a 100,2 b 100 下生成的序列中有多少个不同的项?
算法设计(方法1):
1、将ab 进行因数分解,以字符串的形式保存,eg. 285 = (4 * 7)5 = (22 * 7)5 = 2^10*7^5
2、用一个结构体数组保存所有的数的因数分解表达式
3、对上述结构体数组排序
4、遍历此数组,找出不相同的项的总数
#include <stdio.h> #include <string.h> const int prim[25] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37,41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97}; struct node { char list[100]; }num[9801]; int cmp(const void *a, const void *b) { return strcmp((*(struct node*)a).list, (*(struct node*)b).list); } char * explain(int a, int b) /*将a^b分解因数*/ { char s[100], ch; char *p; p = s; int t; for(int i = 0; i < 25; i++) { t = 0; while(a % prim[i] == 0) { if(t == 0) { sprintf(p,"%d",prim[i]); } a /= prim[i]; t++; } if(t > 0) { p = s + strlen(s); *p++ = '^'; t = t * b; sprintf(p,"%d",t); p = s + strlen(s); if(a != 1) { *p++ = '*'; } else { break; } } } return s; } void solve(void) { int i, j, k, sum; k = 0; for(i = 2; i < 101; i++) { for(j = 2; j < 101; j++) { strcpy(num[k++].list, explain(i,j)); } } qsort(num, 9801, sizeof(num[0]),cmp); sum = 1; for(i = 0; i < 9801; ) { j = i + 1; if(j >= 9801) break; while(strcmp(num[i].list, num[j].list) == 0) { j++; } i = j; sum ++; } printf("%d\n",sum); } int main(void) { solve(); return 0; }
算法设计(方法2):
仔细考察数字矩阵的规律,可以发现:
能够发生重复的数字,将他们因数分解以后,得到的指数的底都是相同的,e.g. 16与64……,在2~100中,能够发生重复数字的底只有4、8、16、32、64、9、27、81、25、36、49、81、100,于是可以在底为2的时候就排除掉以4、8、16、32、64为底的重复的数字。
#include<stdio.h> #include<stdbool.h> #include<stdlib.h> #define N 101 #define M 601 int main(void) { int answer = 0; int i, j, k, l; bool flag[M]; bool use[N] = {false}; for (i = 2; i < N; i++) { if (!use[i]) { int t = i; memset(flag, false, sizeof(flag)); for (j = 2; j < N; j++) { t = t * i; if (t >= N) { break; } use[t] = true; } for (k = 1; k < j; k++) { for (l = 2; l < N; l++) { flag[k*l] = true; } } for (k = 2; k < M; k++) { if(flag[k]){ answer++; } } } } printf("%d\n",answer); return 0; }
Answer:
|
9183 |
Completed on Tue, 19 Nov 2013, 07:28
相关推荐
MySQL 中 DISTINCT 用法详解 MySQL 中的 DISTINCT 关键字用于返回唯一不同的值,避免重复值的出现。当我们在查询表中数据时,可能会遇到重复值的情况,这时使用 DISTINCT 关键字可以帮助我们返回唯一的值。 ...
MySQL通常使用GROUPBY(本质上是排序动作)完成DISTINCT操作,如果DISTINCT操作和ORDERBY操作组合使用,通常会用到临时表.这样会影响性能. 在一些情况下,MySQL可以使用索引优化DISTINCT操作,但需要活学活用.本文涉及一个...
在MySQL数据库中,优化`DISTINCT`操作是一个关键的性能提升策略,特别是在处理大量数据时。上述场景中,用户遇到了一个问题:对一个10G以上的单表`user_access_xx_xx`执行`SELECT COUNT(DISTINCT nick)`以统计唯一...
完美解决distinct中使用多个字段的方法,完美解决distinct中使用多个字段的方法完美解决distinct中使用多个字段的方法完美解决distinct中使用多个字段的方法完美解决distinct中使用多个字段的方法
在SQL语言中,`DISTINCT`关键字是一种非常重要的查询方式,它用于消除查询结果中的重复行,从而确保返回的数据是唯一的。本教程将深入探讨如何使用`DISTINCT`查询,以及在不同场景下它的应用。 一、DISTINCT基本...
在SQL语言中,`DISTINCT`关键字是一个非常重要的部分,特别是在数据检索时,它帮助我们去除结果集中的重复行,确保返回的每一行都是唯一的。本文将深入探讨`DISTINCT`在Oracle数据库中的使用,以及如何与其他SQL元素...
"Oracle 中的 ROWNUM 和 DISTINCT" Oracle 中的 ROWNUM 和 DISTINCT 是两个非常重要的关键词,它们在查询数据时发挥着至关重要的作用。然而,许多开发者在使用这两个关键词时,却常常会遇到一些不太理解的地方,...
`Distinct()`方法是C# LINQ中用于去除重复元素的关键操作,而在EFCore中,它可以应用于数据库查询来过滤掉重复记录。 首先,让我们深入理解`Distinct()`方法。在C#中,`Distinct()`方法通过比较元素的默认等价关系...
### DISTINCT优化之MySQL官方文档翻译解析 #### 一、引言 在数据库查询操作中,经常需要使用`DISTINCT`关键字来去除重复记录,确保结果集中的每一条记录都是唯一的。然而,在某些场景下,使用`DISTINCT`可能会导致...
在本教程中,我们将深入探讨MongoDB中的三个关键聚合操作:`count`、`distinct`和`group`。 1. `count` 函数: `count` 方法用于计算集合中符合特定条件的文档数量。在MongoDB中,你可以直接调用`db.collection....
Oracle数据库中的`DISTINCT`关键字是一个非常重要的SQL查询语句组成部分,它用于去除查询结果中的重复行,确保返回的每一条记录都是唯一的。在本例中,我们将通过创建一个名为`T_GIRL`的超女基本信息表,并插入一些...
select distinct用法 在SQL中,SELECT语句中的DISTINCT关键字的用法是一个非常重要的知识点。DISTINCT关键字的主要用途是去除重复记录,只保留唯一的记录。但是,DISTINCT关键字的使用有一些限制和注意事项。 首先...
今天,我们将深入探讨如何使用`DISTINCT`关键字在MySQL中查询多条不重复记录值,这不仅是一种实用技能,也是提升数据处理效率的关键所在。 ### `DISTINCT`关键字详解 `DISTINCT`关键字在SQL查询中扮演着一个至关...
我就废话不多说了,大家还是直接看代码吧! contacts = ... return house.distinct() 合并出来的queryset,再去重。 补充知识:Python——深入理解urllib、urllib2及requests(requests不建议使用?)
在SQL查询中,`DISTINCT`关键字是一个非常重要的部分,它允许我们从结果集中去除重复的行或特定列的值。在MySQL中,`DISTINCT`的使用方式和功能与其他SQL数据库系统(如SQL Server、Access等)大体相同,但有一些...
在SQL查询中,`DISTINCT`关键字是一个非常重要的部分,它允许我们从查询结果中去除重复的记录,只返回唯一的、不同的值。在MySQL中,`DISTINCT`的使用方式非常灵活,可以从单个列到多个列进行操作,也可以与聚合函数...
Distinct(NetMon)是一款在IT领域中广泛应用的网络抓包工具,因其强大的功能和友好的用户界面而备受赞誉。网络抓包,也被称为网络嗅探,是网络分析的基础,它允许技术人员捕获在网络中传输的数据包,以便进行故障...
当我们处理数据时,有时需要从查询结果中去除重复的记录,这时`DISTINCT`关键字就派上了用场。本文将深入探讨MySQL中的`DISTINCT`语句,以及如何在Visual C++(简称VC)开发环境中与MySQL数据库进行交互。 `...
distinct() 方法一般用于Select查询中,当需要获取特定字段值不重复的数据集时,可以在查询时调用distinct()方法。 distinct()方法的使用非常简单,基本语法如下所示: ```php Model::distinct(true)->field('字段...