1

5.4.1 Cantor 的数表

这道题目原书的代码和讲解都有问题0.0,很明显倒数的方向不一样啊。
害得我打击半天。

c#include <stdio.h>
#include <string.h>

const int maxn = 10000;

int main()
{
    int n;
    int m;
    int sum;
    freopen("input", "r", stdin);
    while(~scanf("%d", &n))
    {
        sum = 0;
        m = 1;
        while(1)
        {
            sum += m;
            if(!(sum < n))
                break;
            m ++;
        }

        if(sum == n)
        {
            if(m % 2)
                printf("1/%d", m);
            else
                printf("%d/1", m);
        }
        else
        {
            int rest = n + m - sum;
            if(m % 2)
                printf("%d/%d", m+1-rest, rest);
            else
                printf("%d/%d", rest, m+1-rest);
        }

        printf("\n");
    }
    return 0;
}

5.4.2 因子和阶乘

小的n,不必要使用线性筛素数。

c#include <stdio.h>
#include <string.h>

bool is_prime(int n)
{
    for(int i = 2; i * i <= n; i++)
        if(n % i == 0) return 0;
    return 1;
}


int prime[100], count[100];
int pnum = 0;

void init()
{
    for(int i = 2; i <= 100; i++)
        if(is_prime(i))
            prime[pnum++] = i;
}

int main()
{
    init();
    int n, t;
    while(~scanf("%d", &n))
    {
        memset(count, 0, sizeof(count));
        int maxp;
        for(int i = 1; i <= n; i++)
        {
            t = i;
            for(int j = 0; j < pnum; j++)
                while(t % prime[j] == 0)
                {
                    t /= prime[j];
                    count[prime[j]] ++;
                    maxp = maxp > j ? maxp : j;
                }
        }

        printf("%d! = ", n);
        for(int i = 0; i <= maxp; i++)
        {
            printf(" %d", count[prime[i]]);
        }
        printf("\n");

    }
    return 0;
}

有向面积

通过行列式的三个点求有向面积(应该是图形学里面的内容)

方法是构建齐次坐标,如果逆时针,有向面积为正,逆时针,有向面积为负。

```


svtter
209 声望37 粉丝

更喜欢原型开发


引用和评论

0 条评论