c - 给定一个素数有序对的列表,将两条具有相似项的行组合成一个有序三元组
问题描述
使用 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。我认为通过告诉它将两行与上面所示的公共元素结合起来,可以制作出更有效的代码。但是,我不知道从哪里开始这段代码。任何帮助表示赞赏。
解决方案
推荐阅读
- node.js - 使用 $unwind 获取空数组作为聚合结果
- java - 无法将 Base64 字符串解码为位图
- java - datasnapshot.getvalue() 不起作用并使应用程序崩溃
- angularjs - 在角度选择中选择特定的默认选项
- java - 使用 Java 在 Linux 上查找给定文件的根目录
- azure-pipelines - 如何在特定时间安排 VSTS 中的构建?
- assembly - MIPS 流水线阶段
- jekyll - 为 github 页面升级 Jekyll 和依赖项
- fonts - 如何比较不同粗细的 OpenType 字体是否相同?
- java - Java:实现一个默认超类,它将为所有子类设置成员