`

(Problem 29)Distinct powers

阅读更多

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

 

2
0
分享到:
评论

相关推荐

    mysql中distinct用法【SQL中distinct的用法】.docx

    MySQL 中 DISTINCT 用法详解 MySQL 中的 DISTINCT 关键字用于返回唯一不同的值,避免重复值的出现。当我们在查询表中数据时,可能会遇到重复值的情况,这时使用 DISTINCT 关键字可以帮助我们返回唯一的值。 ...

    MySQL中索引优化distinct语句及distinct的多字段操作

    MySQL通常使用GROUPBY(本质上是排序动作)完成DISTINCT操作,如果DISTINCT操作和ORDERBY操作组合使用,通常会用到临时表.这样会影响性能. 在一些情况下,MySQL可以使用索引优化DISTINCT操作,但需要活学活用.本文涉及一个...

    分析MySQL中优化distinct的技巧

    在MySQL数据库中,优化`DISTINCT`操作是一个关键的性能提升策略,特别是在处理大量数据时。上述场景中,用户遇到了一个问题:对一个10G以上的单表`user_access_xx_xx`执行`SELECT COUNT(DISTINCT nick)`以统计唯一...

    完美解决distinct中使用多个字段的方法

    完美解决distinct中使用多个字段的方法,完美解决distinct中使用多个字段的方法完美解决distinct中使用多个字段的方法完美解决distinct中使用多个字段的方法完美解决distinct中使用多个字段的方法

    使用Distinct查询.rar

    在SQL语言中,`DISTINCT`关键字是一种非常重要的查询方式,它用于消除查询结果中的重复行,从而确保返回的数据是唯一的。本教程将深入探讨如何使用`DISTINCT`查询,以及在不同场景下它的应用。 一、DISTINCT基本...

    distinct的使用.docx

    在SQL语言中,`DISTINCT`关键字是一个非常重要的部分,特别是在数据检索时,它帮助我们去除结果集中的重复行,确保返回的每一行都是唯一的。本文将深入探讨`DISTINCT`在Oracle数据库中的使用,以及如何与其他SQL元素...

    oracle rownum和distinct

    "Oracle 中的 ROWNUM 和 DISTINCT" Oracle 中的 ROWNUM 和 DISTINCT 是两个非常重要的关键词,它们在查询数据时发挥着至关重要的作用。然而,许多开发者在使用这两个关键词时,却常常会遇到一些不太理解的地方,...

    EFCore查询不重复数据Distinct.docx

    `Distinct()`方法是C# LINQ中用于去除重复元素的关键操作,而在EFCore中,它可以应用于数据库查询来过滤掉重复记录。 首先,让我们深入理解`Distinct()`方法。在C#中,`Distinct()`方法通过比较元素的默认等价关系...

    【DISTINCT】优化之MySQL官方文档翻译

    ### DISTINCT优化之MySQL官方文档翻译解析 #### 一、引言 在数据库查询操作中,经常需要使用`DISTINCT`关键字来去除重复记录,确保结果集中的每一条记录都是唯一的。然而,在某些场景下,使用`DISTINCT`可能会导致...

    MongoDB教程之聚合(count、distinct和group)

    在本教程中,我们将深入探讨MongoDB中的三个关键聚合操作:`count`、`distinct`和`group`。 1. `count` 函数: `count` 方法用于计算集合中符合特定条件的文档数量。在MongoDB中,你可以直接调用`db.collection....

    23.Oracle的distinct关键字1

    Oracle数据库中的`DISTINCT`关键字是一个非常重要的SQL查询语句组成部分,它用于去除查询结果中的重复行,确保返回的每一条记录都是唯一的。在本例中,我们将通过创建一个名为`T_GIRL`的超女基本信息表,并插入一些...

    select distinct用法

    select distinct用法 在SQL中,SELECT语句中的DISTINCT关键字的用法是一个非常重要的知识点。DISTINCT关键字的主要用途是去除重复记录,只保留唯一的记录。但是,DISTINCT关键字的使用有一些限制和注意事项。 首先...

    用Distinct在MySQL中查询多条不重复记录值,绝对的物有所值

    今天,我们将深入探讨如何使用`DISTINCT`关键字在MySQL中查询多条不重复记录值,这不仅是一种实用技能,也是提升数据处理效率的关键所在。 ### `DISTINCT`关键字详解 `DISTINCT`关键字在SQL查询中扮演着一个至关...

    django queryset 去重 .distinct()说明

    我就废话不多说了,大家还是直接看代码吧! contacts = ... return house.distinct() 合并出来的queryset,再去重。 补充知识:Python——深入理解urllib、urllib2及requests(requests不建议使用?)

    小度写范文【SQL中distinct的用法】mysql中distinct用法模板.docx

    在SQL查询中,`DISTINCT`关键字是一个非常重要的部分,它允许我们从结果集中去除重复的行或特定列的值。在MySQL中,`DISTINCT`的使用方式和功能与其他SQL数据库系统(如SQL Server、Access等)大体相同,但有一些...

    小度写范文【SQL中distinct的用法】mysql中distinct用法模板.pdf

    在SQL查询中,`DISTINCT`关键字是一个非常重要的部分,它允许我们从查询结果中去除重复的记录,只返回唯一的、不同的值。在MySQL中,`DISTINCT`的使用方式非常灵活,可以从单个列到多个列进行操作,也可以与聚合函数...

    Distinct(NetMon)很好用的网络抓包工具

    Distinct(NetMon)是一款在IT领域中广泛应用的网络抓包工具,因其强大的功能和友好的用户界面而备受赞誉。网络抓包,也被称为网络嗅探,是网络分析的基础,它允许技术人员捕获在网络中传输的数据包,以便进行故障...

    vc 小技巧 mysql distinct 语句

    当我们处理数据时,有时需要从查询结果中去除重复的记录,这时`DISTINCT`关键字就派上了用场。本文将深入探讨MySQL中的`DISTINCT`语句,以及如何在Visual C++(简称VC)开发环境中与MySQL数据库进行交互。 `...

    Thinkphp 中 distinct 的用法解析

    distinct() 方法一般用于Select查询中,当需要获取特定字段值不重复的数据集时,可以在查询时调用distinct()方法。 distinct()方法的使用非常简单,基本语法如下所示: ```php Model::distinct(true)-&gt;field('字段...

Global site tag (gtag.js) - Google Analytics