c - 当我尝试在矩阵中查找素数时,某些数字被错误地更改
问题描述
我尝试在矩阵中找到素数,然后分别用 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++) {
推荐阅读
- html - SVG 用另一个元素开始一个 SMIL 动画
- javascript - 如何使用 jQuery 动态翻译 html 输入占位符?
- c# - 实体框架 - 存储过程返回值
- java - 适用于 CDH 5.15 的 Cloudera HBase 客户端
- javascript - 如何从函数中打开组件反应本机
- php - 通过 CLI 执行 PHP 文件返回空白
- ios - 如何为 Alamofire 响应设置委托
- visual-studio - VS Single license 多个版本
- windows - 关闭特定 Excel 工作簿时检测的 Bat 文件
- ios - 以编程方式删除半透明的黑色阴影