gpt4 book ai didi

c - 当我尝试在矩阵中查找素数时,某些数字被错误地更改

转载 作者:太空宇宙 更新时间:2023-11-04 03:13:07 25 4
gpt4 key购买 nike

我尝试在矩阵中找到素数,然后分别用 1 和 0 替换。对于某些输出是正确的,但对于某些输出是不正确的,并且它不会更改最后一个元素。无法弄清楚是什么原因造成的。查找用于查找素数的公式,他们使用与我相同的循环。

int main() {
int m, n;
scanf("%d %d", &m, &n);

int a[m][n];

for(int i = 0; i < m; i++) {
for(int j = 0; j < n; j++) {
scanf("%d", &a[i][j]);
}
}


for(int i = 0; i < m; i++) {
for(int j = 0; j < n; j++) {
for(int k = 2; k < a[i][j]; k++) {
if(a[i][j] % k == 0) {
a[i][j] = 0;
} else if(a[i][j] % k != 0){
a[i][j] = 1;
}
}
}
}

输入:

15 23 7 10
6 18 5 31
31 14 1 2

我得到的输出:

1 1 1 0
0 0 1 1
1 0 1 2

我需要得到的输出:

0 1 1 0
0 0 1 1
1 0 0 1

最佳答案

作为素数测试的一部分,在数字被标记为不是素数后停止迭代。

        int p = a[i][j];
a[i][j] = p > 1;
for(int k = 2; k < p; k++) {
if(p % k == 0) {
a[i][j] = 0;
break;
}
}

更好的是,无需迭代直到 k < p .使用 k*k <= p 可以更快地停止代码或更好的 k <= p/k .考虑是否 p接近 1,000,000。与 1,000,000 次循环不同,代码执行最多 1,000 次循环 - 快得多。

        // for(int k = 2; k < p; k++) {
for(int k = 2; k <= p/k; k++) {

关于c - 当我尝试在矩阵中查找素数时,某些数字被错误地更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54472210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com