c - 如何生成一组数字

标签 c math

我必须生成集合 Z满足方程 i = 2^a * 3^b 的前 100 个整数,与 ab是整数。

Z = {1, 2, 3, 4, 6, 8, 9, 12, ...}

我可以使用什么算法?我需要用 C 语言实现它。

最佳答案

用 C 语言

#include <stdio.h>
#include <math.h>
#include <stdint.h>
typedef unsigned long long int ull;

ull cmp(const void * a, const void * b) { return *(ull *)a  - *(ull *)b; } 

int main() {
    int i = 0, a, b;
    int A = 17, 
        B = 16;
    int MAX = A * B;
    ull z[MAX];
    for (b = 0; b < B; ++b) {
        for (a = 0; a < A; ++a) {
            if (i >= MAX) break;
            z[i++] = pow(2, a) * pow(3, b);
        }
    }
    qsort(z, MAX, sizeof(ull), cmp);
    printf("{ ");
    for (i = 0; i < 100; ++i)
        printf("%lld%c ", z[i], i < 99 ? ',' : 0);
    printf("}");
    return 0;
}

输出

{ 1, 2, 3, 4, 6, 8, 9, 12, 16, 18, 24, 27, 32, 36, 48, 54, 64, 72, 81, 96, 108, 128, 144, 162, 192, 216, 243, 256, 288, 324, 384, 432, 486, 512, 576, 648, 729, 768, 864, 972, 1024, 1152, 1296, 1458, 1536, 1728, 1944, 2048, 2187, 2304, 2592, 2916, 3072, 3456, 3888, 4096, 4374, 4608, 5184, 5832, 6144, 6561, 6912, 7776, 8192, 8748, 9216, 10368, 11664, 12288, 13122, 13824, 15552, 16384, 17496, 18432, 19683, 20736, 23328, 24576, 26244, 27648, 31104, 32768, 34992, 36864, 39366, 41472, 46656, 49152, 52488, 55296, 59049, 62208, 65536, 69984, 73728, 78732, 82944, 93312 }

编辑:现在提供正确的输出而不会溢出(请参阅 http://ideone.com/Rpbqms )

关于c - 如何生成一组数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31163756/

相关文章:

c++ - 连接到 C 中的主机

c - 共享内存段的键为0

用指针调用函数不会改变该指针的值?

math - LUA中的正态分布曲线和随机数

java - 我将如何创建一个旋转矩阵,将 X 旋转 a,Y 旋转 b,Z 旋转 c?

java - 如何正确输出反正弦,并解决这个数学任务?

java - 如何计算集合而不是集合的排列

对一段递归检查链接列表是否回文的代码感到好奇

c - 三重指针警告

Android getOrientation 方位角在手机倾斜时被污染