(Problem 29)Distinct powers
Consider all integer combinations ofabfor 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 byabfor 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、遍历此数组,找出不相同的项的总数
//(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的更多相关文章
- (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 ...
- (Problem 53)Combinatoric selections
There are exactly ten ways of selecting three from five, 12345: 123, 124, 125, 134, 135, 145, 234, 2 ...
- (Problem 57)Square root convergents
It is possible to show that the square root of two can be expressed as an infinite continued fractio ...
- (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 ...
- (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 ...
- (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 ...
- (Problem 70)Totient permutation
Euler's Totient function, φ(n) [sometimes called the phi function], is used to determine the number ...
- (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 ...
- (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 ...
随机推荐
- cpan安装及其使用
cpan安装及其使用 Perl是一种相当灵活的程序编程语言,现有的许有程序都是使用它进行编程的.它的优点之一就是无需自己编写编码,你就能利用许多增加的模块,创建新的功能. 程序利用这些模块的编码,而程 ...
- 脑波设备mindwaveTGC接口示例
TGC是一个后台应用程序,它负责和脑波设备建立连接,并获取数据,另一方面,它打开了一个端口在监听,让二次开发的应用程序,可以通过socket连接到这个TGC后台程序,获取脑波数据并展示,这种接口适合非 ...
- request.getParameterValues与request.getParameter的差别
一. 简单的对照 request.getParameter用的比較多,相对熟悉 request.getParameterValues(String name)是获得如checkbox类(名字同样, ...
- frame.origin.x 的意思和作用?
frame.origin.x 的意思和作用? scrollView.frame 一个view的frame 包含它的矩形形状(size)的长和宽. 和它在父视图中的坐标原点(origin)x和y坐标 f ...
- 1.语言概述-JavaScript权威指南笔记
上周三的时候交给老板目前的项目第一个迭代回顾会的总结.原本是以综述性的表述方式写的,交给他之后表示程序员不要长篇大论.总结要分为优点缺点期望等等块,每块列出条目,简明扼要的表达出来.这里也用这种风格. ...
- jsp 有哪些动作?作用分别是什么?
答:JSP 共有以下 6 种基本动作jsp:include: 在页面被请求的时候引入一个文件.jsp:useBean: 寻找或者实例化一个 JavaBean.jsp:setProperty: 设置 J ...
- 面试题之java 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 要求不能出现截半的情况
题目:10. 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串. 但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输 ...
- jquery左右自适应伸缩插件
简单css布局 body { margin: 0 auto; padding: 0 auto; } .showpannal { position:absolute; left: 200px; top: ...
- sping+maven+mybatis+ehcache续之实现mapper
配置接着上一篇文章 新建UserMapper.java和UserMapper.xml 其中UserMapper.xml的namespace以及文件名要和UserMapper.java一致 <ma ...
- squid客户端命令
常用squid客户端命令: squidclient -p mgr:info #取得squid运行状态信息: squidclient -p mgr:mem #取得squid内存使用情况: squidcl ...