解释这个素数程序[C]
explain this prime number program [C]
#include<stdio.h>
main()
{
int n;
int a,b,flag=1;
scanf("%d",&n);
for(a=2; a<=n; a++)
{
if(n % a == 0)
{
printf("not prime");
flag = 0;
break;
}
}
if(flag == 1)
{
printf("is prime");
}
getch();
}
当你使用这个 for 循环时
for(a=2; a<=n; a++)
当用户输入 2 时,它将打印"不是素数:
如果将该if(flag == 1)
语句放在 for 循环中,则当用户输入 2 时,它不会打印任何内容。为什么if(flag == 1)
在 for 循环之外
#include<stdio.h>
main()
{
int i, num, flag = 1;
scanf("%d",&num);
for(i=2; i<=sqrt(num); i++)
{
if(num%i==0)
{
printf("not prime");
flag=0;
break;
}
}
if(flag==1)
{
printf("is prime");
}
getch();
}
何时在 for 循环中使用平方根
for(i=2; i<=sqrt(num); i++)
然后它给出正确的结果如果您输入 2,则打印 2 是质数为什么?
什么是标志变量它是如何工作的?
问题是这一行是错误的:
for(a=2; a<=n; a++)
应该是这样的:
for(a=2; a<n; a++)
因为 n 本身总是可整除的,所以当 a 为 n 时n % a == 0
。这并不意味着这个数字不是素数。素数正好可以被 1 和自身整除,但不能被其他整数整除。
当您将测试更改为a <= sqrt(num)
时,您也恰好修复了此错误。
for(a=2; a <= n; a++)
应该是
for(a=2; a < n; a++)
//^ difference
另外,当你使用 sqrt(n)
时,你最好在循环外写这个以提高性能:
int m = sqrt(n); //store the result in int type
for(a=2; a <= m ; a++)
这样,您只需计算一次sqrt(n)
,而不是在每次迭代中计算,而不是依赖编译器来优化此步骤。
相关文章:
- 内联程序集printf将整数解释为地址
- 有人可以在下面的示例 C++ 程序中解释字符数组 KCHAR1 的奇怪行为吗?
- 请有人解释该程序的工作原理
- 您可以在此程序中解释Array 5的目的吗?
- 解释程序的输出
- 在 c++ 程序中调试链表以添加两个数字: 有人可以解释为什么 l3=l3->next;导致错误?
- 任何人都可以解释此程序的类型促销以及为什么输出相同
- 字符串中的空格是否会改变程序解释它的方式
- 有人可以向我解释一下这段代码是如何工作的吗?(程序在预期数值且用户输入其他输入时再次要求用户输入)
- 程序读取文字或解释变量所需的时间是否更少
- C++中更快地执行两个程序的可能解释(使用 Python 比较)?
- 有人可以解释为什么这个程序可以计算小数点后的位数
- 有人可以解释为什么该程序显示我 6 和 4
- 有人可以解释这个 c++ 程序的输出吗?
- C++:帮助解释简单程序的行为
- 有人可以解释这个程序如何提供这个输出
- QT应用程序无法解释使用SQLite插入功能
- 解释 C++/SDL2 程序的 valgrind 输出
- C++带有地图的程序 - 解释下面的程序是如何工作的
- 字面量和常量是如何被程序解释和保存的