Consider all integer combinations ofabfor 2a5 and 2b5:

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 byabfor 2a100 and 2b100?

题目大意:

考虑 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、遍历此数组,找出不相同的项的总数

//(Problem 29)Distinct powers
// Completed on Tue, 19 Nov 2013, 07:28
// Language: C
//
// 版权所有(C)acutus (mail: acutus@126.com)
// 博客地址:http://www.cnblogs.com/acutus/
#include <stdio.h>
#include <string.h> const int prim[] = {, , , , , , , , , , , ,,
, , , , , , , , , , , }; struct node
{
char list[]; }num[]; 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[], ch;
char *p;
p = s;
int t;
for(int i = ; i < ; i++) {
t = ;
while(a % prim[i] == ) {
if(t == ) {
sprintf(p,"%d",prim[i]);
}
a /= prim[i];
t++;
}
if(t > ) {
p = s + strlen(s);
*p++ = '^';
t = t * b;
sprintf(p,"%d",t);
p = s + strlen(s);
if(a != ) {
*p++ = '*';
} else {
break;
}
}
}
return s;
} void solve(void)
{
int i, j, k, sum;
k = ;
for(i = ; i < ; i++) {
for(j = ; j < ; j++) {
strcpy(num[k++].list, explain(i,j));
}
}
qsort(num, , sizeof(num[]),cmp);
sum = ;
for(i = ; i < ; ) {
j = i + ;
if(j >= ) break;
while(strcmp(num[i].list, num[j].list) == ) {
j++;
}
i = j;
sum ++;
}
printf("%d\n",sum);
} int main(void)
{
solve();
return ;
}

算法设计(方法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 = ;
int i, j, k, l;
bool flag[M]; bool use[N] = {false}; for (i = ; i < N; i++)
{
if (!use[i])
{
int t = i; memset(flag, false, sizeof(flag)); for (j = ; j < N; j++)
{
t = t * i;
if (t >= N)
{
break;
}
use[t] = true;
} for (k = ; k < j; k++)
{
for (l = ; l < N; l++)
{
flag[k*l] = true;
}
} for (k = ; k < M; k++)
{
if(flag[k]){
answer++;
} }
}
}
printf("%d\n",answer);
return ;
}
Answer:
9183

(Problem 29)Distinct powers的更多相关文章

  1. (Problem 47)Distinct primes factors

    The first two consecutive numbers to have two distinct prime factors are: 14 = 2  7 15 = 3  5 The fi ...

  2. (Problem 53)Combinatoric selections

    There are exactly ten ways of selecting three from five, 12345: 123, 124, 125, 134, 135, 145, 234, 2 ...

  3. (Problem 57)Square root convergents

    It is possible to show that the square root of two can be expressed as an infinite continued fractio ...

  4. (Problem 73)Counting fractions in a range

    Consider the fraction, n/d, where n and d are positive integers. If nd and HCF(n,d)=1, it is called ...

  5. (Problem 42)Coded triangle numbers

    The nth term of the sequence of triangle numbers is given by, tn = ½n(n+1); so the first ten triangl ...

  6. (Problem 41)Pandigital prime

    We shall say that an n-digit number is pandigital if it makes use of all the digits 1 to n exactly o ...

  7. (Problem 70)Totient permutation

    Euler's Totient function, φ(n) [sometimes called the phi function], is used to determine the number ...

  8. (Problem 74)Digit factorial chains

    The number 145 is well known for the property that the sum of the factorial of its digits is equal t ...

  9. (Problem 46)Goldbach's other conjecture

    It was proposed by Christian Goldbach that every odd composite number can be written as the sum of a ...

随机推荐

  1. cpan安装及其使用

    cpan安装及其使用 Perl是一种相当灵活的程序编程语言,现有的许有程序都是使用它进行编程的.它的优点之一就是无需自己编写编码,你就能利用许多增加的模块,创建新的功能. 程序利用这些模块的编码,而程 ...

  2. 脑波设备mindwaveTGC接口示例

    TGC是一个后台应用程序,它负责和脑波设备建立连接,并获取数据,另一方面,它打开了一个端口在监听,让二次开发的应用程序,可以通过socket连接到这个TGC后台程序,获取脑波数据并展示,这种接口适合非 ...

  3. request.getParameterValues与request.getParameter的差别

    一. 简单的对照 request.getParameter用的比較多,相对熟悉 request.getParameterValues(String   name)是获得如checkbox类(名字同样, ...

  4. frame.origin.x 的意思和作用?

    frame.origin.x 的意思和作用? scrollView.frame 一个view的frame 包含它的矩形形状(size)的长和宽. 和它在父视图中的坐标原点(origin)x和y坐标 f ...

  5. 1.语言概述-JavaScript权威指南笔记

    上周三的时候交给老板目前的项目第一个迭代回顾会的总结.原本是以综述性的表述方式写的,交给他之后表示程序员不要长篇大论.总结要分为优点缺点期望等等块,每块列出条目,简明扼要的表达出来.这里也用这种风格. ...

  6. jsp 有哪些动作?作用分别是什么?

    答:JSP 共有以下 6 种基本动作jsp:include: 在页面被请求的时候引入一个文件.jsp:useBean: 寻找或者实例化一个 JavaBean.jsp:setProperty: 设置 J ...

  7. 面试题之java 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 要求不能出现截半的情况

    题目:10. 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串. 但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输 ...

  8. jquery左右自适应伸缩插件

    简单css布局 body { margin: 0 auto; padding: 0 auto; } .showpannal { position:absolute; left: 200px; top: ...

  9. sping+maven+mybatis+ehcache续之实现mapper

    配置接着上一篇文章 新建UserMapper.java和UserMapper.xml 其中UserMapper.xml的namespace以及文件名要和UserMapper.java一致 <ma ...

  10. squid客户端命令

    常用squid客户端命令: squidclient -p mgr:info #取得squid运行状态信息: squidclient -p mgr:mem #取得squid内存使用情况: squidcl ...