C 如何正确编写素数代码?
我试着写一个代码来获取大量案例的输入,并为每个案例预测它是否是素数。我编写了以下代码,但输出不正确。代码是:C 如何正确编写素数代码?,c,C,我试着写一个代码来获取大量案例的输入,并为每个案例预测它是否是素数。我编写了以下代码,但输出不正确。代码是: #include <stdio.h> int main() { int k,m; long long int arr[k]; int n, i, flag = 0; scanf("%d", &k); for(m=0;m<k;++m) { scanf("%lld&quo
#include <stdio.h>
int main()
{
int k,m;
long long int arr[k];
int n, i, flag = 0;
scanf("%d", &k);
for(m=0;m<k;++m)
{
scanf("%lld", &arr[m]);
for (i = 2; i <= arr[m] / 2; ++i)
{
if (arr[m] % i == 0)
flag = 1;
if (flag == 0)
printf("Yes\n");
else
printf("No\n");
}
}
}
#包括
int main()
{
int k,m;
长整数arr[k];
int n,i,flag=0;
scanf(“%d”和“&k”);
对于(m=0;m
long-long-int-arr[k];
应该在scanf(“%d”、&k);
之后,以便将输入帐户正确地考虑到分配大小中
标志
应为每个NUNBER初始化
- 结果输出应该在循环完成之后。您应该正确使用缩进
- 小于2的整数不是素数
- 奇怪的是,
i
是int
,而arr[m]
是long-long-int
固定代码:
#include <stdio.h>
int main()
{
int k,m;
int n, flag = 0;
scanf("%d", &k);
long long int arr[k], i;
for(m=0;m<k;++m)
{
scanf("%lld", &arr[m]);
flag = 0;
for (i = 2; i <= arr[m] / 2; ++i)
{
if (arr[m] % i == 0)
{
flag = 1;
}
}
if (arr[m] >= 2 && flag == 0)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
主要有三个问题:
在从用户获得大小之前,您正在分配可变长度数组arr
每次迭代后都不会重置标志
只有在测试了arr[m]
的所有可能的除数后,才应打印是或否
也就是说,让我们改进您的代码:
首先,我们根本不需要数组
int main() {
int numbers_to_test;
scanf("%d, &numbers_to_test);
for (int i=0; i < numbers_to_test; i++) {
long long int number_to_test;
scanf("%lld", &number_to_test);
int flag = 0;
for (int divisor = 2; divisor <= number_to_test / 2; ++divisor) {
if (number_to_test % divisor == 0) {
flag = 1;
}
}
if (flag == 0)
printf("Yes\n");
else
printf("No\n");
}
}
intmain(){
整数对整数检验;
scanf(“%d,&个数到个数测试);
对于(int i=0;i 对于(整型除数=2;除数以,long-long-int-arr[k]开头;
应在scanf(“%d”,&k)之后)
。看起来你所做的一切就是确定一个数字是偶数还是奇数。你必须为每个候选m
重置标志。你的标志测试除了上面指出的其他固定标志外,还需要移到循环之外。你还应该在设置标志后尽快从循环中中断
到1
,因为此时没有理由继续测试潜在的除数。您的代码将错误地将1
判断为素数。还要注意,之后缺少,%d
和i
未在iPrime
中定义。(备注:#include
应用于使bool
、true
和false
可用)
int main() {
int numbers_to_test;
scanf("%d, &numbers_to_test);
for (int i=0; i < numbers_to_test; i++) {
long long int number_to_test;
scanf("%lld", &number_to_test);
int flag = 0;
for (int divisor = 2; divisor <= number_to_test / 2; ++divisor) {
if (number_to_test % divisor == 0) {
flag = 1;
}
}
if (flag == 0)
printf("Yes\n");
else
printf("No\n");
}
}
bool isPrime(long long int number_to_test) {
if (number_to_test <= 1)
return false;
for (long long int divisor = 2; divisor <= number_to_test / 2; ++divisor)
if (number_to_test % divisor == 0)
return false;
return true;
}
int main() {
int numbers_to_test;
scanf("%d", &numbers_to_test);
for (int i=0; i < numbers_to_test; i++) {
long long int number_to_test;
scanf("%lld", &number_to_test);
if (isPrime(number_to_test))
printf("Yes\n");
else
printf("No\n");
}
}