首页 > 解决方案 > 给定一个素数有序对的列表,将两条具有相似项的行组合成一个有序三元组

问题描述

使用 C,我生成了一个素数列表,直到 1000 万,并从该列表中创建了另一个由有序对 [x,y] 组成的列表,使得 x 和 y 的差为 6。

但是,当我尝试编写一个生成 [x,y,z] 三倍或 [w,x,y,z] 四倍高达 1000 万的代码时,我的计算机根本不够强大,无法完成在合理的时间内工作。

我的想法是编写一个代码,打开有序对的文本文件,识别两个单独行上的重复数字并将这些行组合起来,如下所示:

[5, 11]

[11, 17]

[17, 23]

[23, 29]

会变成 [5, 11, 17, 23, 29]

我怎样才能在 C 中做到这一点?

编辑:这是我的代码,用于生成相差 6 的 5 个数字的级数:

#include <stdio.h>

main()
{
freopen("test.txt", "w+", stdout);
    FILE *twinPrimes;
    twinPrimes = fopen("primes.txt", "r");

    //read file into array
    int numberArray[664579];
    int i;
    int j;
    int k;
    int l;
    int m;

    for (i = 0; i < 664579; i++)
    {
        fscanf(twinPrimes, "%d", &numberArray[i]);
    }

    for(i = 0; i < 664579; i++) {       
    for(j = i+1; j < i+6; j++) {
    for(k = j+1; k < j+6; k++) {
    for(l = k+1; l < k+6; l++) {
    for(m = l+1; m < l+6; m++) {
    if(abs(numberArray[i] - numberArray[j]) == 6) {
    if(abs(numberArray[j] - numberArray[k]) == 6) {
    if(abs(numberArray[k] - numberArray[l]) == 6) {
    if(abs(numberArray[l] - numberArray[m]) == 6) {
        printf("[%d, %d, %d, %d, %d]\n", numberArray[i], numberArray[j], numberArray[k], numberArray[l], numberArray[m]);} } } } } }     }

        }
    }
}

但是,我仍然遇到的问题是,如果不减慢计算机速度或花费极长的时间来完成处理,我就无法生成更大的进程。

但是,我有一个文本文件,其中包含一个有序的素数对列表,它们相差 6。我认为通过告诉它将两行与上面所示的公共元素结合起来,可以制作出更有效的代码。但是,我不知道从哪里开始这段代码。任何帮助表示赞赏。

标签: c

解决方案


推荐阅读