| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2977 人关注过本帖
标题:求助,用递归的方法求Pell's equation p^2-2q^2=1的前50对解
取消只看楼主 加入收藏
楚子航992
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2020-5-4
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:4 
求助,用递归的方法求Pell's equation p^2-2q^2=1的前50对解
#include<stdio.h>
int main(){
    long long int p=1,q=1,count=0;
    while(1){
        while(p*p<(2*q*q+1)){
            p++;
        }
        if(p*p==(2*q*q+1)){
            count++;
            printf("(%d,%d) ",p,q);
        }
        q++;
        if(count==10) break;
    }
    return 0;
}
我只会这么写,但这么写根本输出不了那么多。。。而且也不是递归。。。。
搜索更多相关主题的帖子: while 递归 long count 方法 
2020-05-30 20:31
楚子航992
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2020-5-4
收藏
得分:0 
回复 2楼 JabinZ
您好,改完之后还是出现不了50个
2020-05-30 21:13
楚子航992
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2020-5-4
收藏
得分:0 
回复 5楼 JabinZ
所以我的目的就是来论坛问问大佬们,用什么方法做,我知道我这个算法不行的,所以来请教下
2020-05-30 21:36
楚子航992
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2020-5-4
收藏
得分:0 
回复 7楼 rjsp
#include<stdio.h>
#define M 10000

void multiply(int x[], int y, int z[]) {
    int i, temp, b = 0;
    for (i = M - 1; i >= 0; i--)
    {
        temp = x[i] * y + b;
        z[i] = temp % 10;
        b = temp / 10;
    }
}

void add(int a[], int b[], int c[]) {
    int i, temp, k = 0;
    for (i = M - 1; i >= 0; i--) {
        temp = a[i] + b[i] + k;
        c[i] = temp % 10;
        k = temp / 10;
    }

}

void copy(int x[], int y[]) {
    int i, j;
    for (i = 0; i < M; i++) {
        if (x[i] > 0) {
            j = i;
            break;
        }

    }
    for (i = j; i < M; i++) {
        y[i] = x[i];
    }
}


void pell(int i, int a[], int b[], int a1[], int a2[], int b1[], int b2[]) {
    int j, m, n;
    if (i == 0) { printf("end"); }
    else {
        multiply(a, 3, a2);
        multiply(b, 4, b2);
        add(a2, b2, a1);
        multiply(a, 2, a2);
        multiply(b, 3, b2);
        add(a2, b2, b1);
        copy(a1, a);
        copy(b1, b);
        for (j = 0; j < M; j++) {
            if (a1[j] > 0)
            {
                m = j;
                break;
            }
        }
        printf("(");
        for (n = m; n < M; n++)
            printf("%d", a1[n]);
        printf(", ");
        for (j = 0; j < M; j++)
        {
            if (b1[j] > 0)
            {
                m = j;
                break;
            }
        }
        for (n = m; n < M; n++)
            printf("%d", b1[n]);
        printf(")");
        printf("\n");
        pell(i - 1, a, b, a1, a2, b1, b2);
    }

}

int main() {
    int a[M] = { 0 }, b[M] = { 0 };
    a[M - 1] = 3;
    b[M - 1] = 2;
    int a1[M] = { 0 }, a2[M] = { 0 }, b1[M] = { 0 }, b2[M] = { 0 };
    printf("(p, q):\n");
    printf("(3, 2)\n");
    pell(49, a, b, a1, a2, b1, b2);
    fflush(stdin);
    getchar();
    return 0;
}
这个可以,秒出
2020-05-31 19:12
楚子航992
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2020-5-4
收藏
得分:0 
回复 9楼 forever74
#include<stdio.h>
#define M 10000

void multiply(int x[], int y, int z[]) {
    int i, temp, b = 0;
    for (i = M - 1; i >= 0; i--)
    {
        temp = x[i] * y + b;
        z[i] = temp % 10;
        b = temp / 10;
    }
}

void add(int a[], int b[], int c[]) {
    int i, temp, k = 0;
    for (i = M - 1; i >= 0; i--) {
        temp = a[i] + b[i] + k;
        c[i] = temp % 10;
        k = temp / 10;
    }

}

void copy(int x[], int y[]) {
    int i, j;
    for (i = 0; i < M; i++) {
        if (x[i] > 0) {
            j = i;
            break;
        }

    }
    for (i = j; i < M; i++) {
        y[i] = x[i];
    }
}


void pell(int i, int a[], int b[], int a1[], int a2[], int b1[], int b2[]) {
    int j, m, n;
    if (i == 0) { printf("end"); }
    else {
        multiply(a, 3, a2);
        multiply(b, 4, b2);
        add(a2, b2, a1);
        multiply(a, 2, a2);
        multiply(b, 3, b2);
        add(a2, b2, b1);
        copy(a1, a);
        copy(b1, b);
        for (j = 0; j < M; j++) {
            if (a1[j] > 0)
            {
                m = j;
                break;
            }
        }
        printf("(");
        for (n = m; n < M; n++)
            printf("%d", a1[n]);
        printf(", ");
        for (j = 0; j < M; j++)
        {
            if (b1[j] > 0)
            {
                m = j;
                break;
            }
        }
        for (n = m; n < M; n++)
            printf("%d", b1[n]);
        printf(")");
        printf("\n");
        pell(i - 1, a, b, a1, a2, b1, b2);
    }

}

int main() {
    int a[M] = { 0 }, b[M] = { 0 };
    a[M - 1] = 3;
    b[M - 1] = 2;
    int a1[M] = { 0 }, a2[M] = { 0 }, b1[M] = { 0 }, b2[M] = { 0 };
    printf("(p, q):\n");
    printf("(3, 2)\n");
    pell(49, a, b, a1, a2, b1, b2);
    fflush(stdin);
    getchar();
    return 0;
}
帮忙看下我这么编可以么
2020-05-31 19:14
快速回复:求助,用递归的方法求Pell's equation p^2-2q^2=1的前50对解
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.043647 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved