ACM - 5.4 數學基礎

5.4.1 Cantor 的數表

這道題目原書的代碼和講解都有問題0.0,很明顯倒數的方向不同啊。
害得我打擊半天。rest

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,沒必要要使用線性篩素數。code

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;
}

有向面積

經過行列式的三個點求有向面積(應該是圖形學裏面的內容)input

方法是構建齊次座標,若是逆時針,有向面積爲正,逆時針,有向面積爲負。string

```it

相關文章
相關標籤/搜索