C程序判断一个数是否为质数
C program to check whether a number is prime or not
我使用了以下代码,它显示像 49 这样的数字是素数而不是合数。我是编程新手,所以请帮助我提供正确的代码。
#include <stdio.h>
int main()
{
int n;
int i;
scanf ("%d", &n);
for (i=2; i<n; i++)
{
if (n%i==0)
{
printf ("number is composite");
}
else
{
i=i+1;
}
}
printf("number is prime");
return 0;
}
您可以按如下方式修改循环 -
if(n%2==0 && n!=2){ //if 2's multiple is entered no need of loop just check this
printf("number is composite");
return 2; // for sake I just returned 2
}
for (i=3; i<n;i=i+2)
{
if (n%i==0) // if this is true
{
printf ("number is composite"); // print this
return 1; // return from function no further iterations
}
}
通过这种方式,您可以停止循环,因为 if
条件是 true
并且我们执行了其代码块中的代码。
当您发现该数字是合数时,您没有停止循环,因此合数会收到两条消息。
当 i
不是 n
的因数时,您将向 i
加 1,然后 for
循环再次加 1。这意味着对于每个 不是 的 n
因数的数字,您将跳过一个数字。
printf("number is prime");
没有被任何类型的 if 包围,所以它 总是 被打印,不管这个数字是否真的是质数。与人类不同,计算机在打印相互冲突的信息时不会三思而后行,因为计算机无法解释我们让它们执行的操作。
您可以通过检查更少的数字来优化您的代码。只检查数字的平方根。
此代码未经测试,但应该可以使用。请注意,这只会消除对平方根以上因子的检查,但 不会 先前检查因子的任何倍数(例如,这样写,程序将检查数字是否可被 2 整除,但也按 4、6、8、10 等)。
#include <stdio.h>
#include <math.h>
int main()
{
int n;
int i;
int isComposite = 0;
scanf ("%d", &n);
for (i = 2; i <= (int)sqrt((double)n); i++){
if (n % i == 0){
printf ("number is composite");
isComposite = 1;
break;
}
}
if (!isComposite){
printf("number is prime");
}
return 0;
}
综合所有建议和意见得出:
int q= (int) sqrt(n);
if (n%2==0)
{
printf ("number is composite"); // print this
return 1; // return from function no further iterations
}
for (i=3; i<=q; i += 2)
{
if (n%i==0) // if this is true
{
printf ("number is composite"); // print this
return 1; // return from function no further iterations
}
}
你得到 49 a s 复合的原因是因为这一行:
else
{
i=i+1;
}
这会导致您在检查中跳过奇数,而 49 是 7*7,因此您得到的输出是它是质数。
另一个问题是当你得到一个合数时你没有停止循环,并且在它结束时你将调用这行代码而不管循环中发生了什么。
printf("number is prime");
这里有一个更好的做法:
创建一个函数,如果它是素数,则 return 为 1,否则为 0。
如果你意识到这是一个合数,你应该立即return。如果你到达循环的末尾,它肯定是一个质数。
此外,您可以 运行 循环到 n 的平方根以获得更小的迭代次数,直到 n。
祝你好运
int isPrime(int n)
{
int i;
for (i = 2; i < (int) sqrt(n) ; i++)
{
if (n % i == 0)
{
printf("number is composite");
return 0;
}
}
printf("number is prime");
return 1;
}
您应该删除 i=i+1
行,您已经在 for (i=2; i<n; i++)
中递增 i
之后,你必须把你的条件放在循环之后,以防止在每次检查时打印结果。
#include <stdio.h>
int main()
{
int n;
int i;
scanf ("%d", &n);
for (i = 2; i<n; ++i)
{
if (n%i==0)
{
printf ("number is composite, divisible by %d\n", i);
break;
}
printf("i=%d\n", i);
}
if (n%i != 0)
printf("number is prime\n");
return 0;
}
给你。
#include <stdio.h>
int main( void )
{
while ( 1 )
{
unsigned int n = 0;
_Bool prime;
printf( "\nEnter a non-negative number (0-exit): " );
scanf( "%u", &n );
if ( !n ) break;
prime = n == 2 || ( n % 2 && n != 1 );
for ( unsigned i = 3; prime && i * i <= n; i += 2 )
{
prime = n % i;
}
printf( "Number %u is %s\n", n, prime ? "prime" : "composite" );
}
return 0;
}
如果依次进入
1 2 3 4 5 6 7 8 9 0
那么输出是
Enter a non-negative number (0-exit): 1
Number 1 is composite
Enter a non-negative number (0-exit): 2
Number 2 is prime
Enter a non-negative number (0-exit): 3
Number 3 is prime
Enter a non-negative number (0-exit): 4
Number 4 is composite
Enter a non-negative number (0-exit): 5
Number 5 is prime
Enter a non-negative number (0-exit): 6
Number 6 is composite
Enter a non-negative number (0-exit): 7
Number 7 is prime
Enter a non-negative number (0-exit): 8
Number 8 is composite
Enter a non-negative number (0-exit): 9
Number 9 is composite
Enter a non-negative number (0-exit): 0
另一种判断一个数是否为质数的方法是:-`
#include<stdio.h>
void main()
{
int no,i;
char x='y';
printf("Enter a number : ");
scanf("%d",&no);
for (i=2;i<=no/i;i++)
{
if(no%i==0)
{
x='n';
break;
}
}
if(x=='y')
printf("The number is a prime number. ");
else
printf("The number is not prime number. ");
}
这里的逻辑是将测试用例的数量限制为(被测数与循环计数器值的商),因为除数不能超过这个商。
#include <stdio.h>
int main(){
int intNumber=0;
int intCount=0;
printf("Enter Number :");
scanf("%d",&intNumber);
for(int i=1;i<=intNumber;i++){
if(intNumber%i==0){
intCount++;
}
}
if(intCount==2 && intNumber!=1){
printf("Number is prime");
}else{
printf("Number is not prime");
}
return 0;
}
我使用了以下代码,它显示像 49 这样的数字是素数而不是合数。我是编程新手,所以请帮助我提供正确的代码。
#include <stdio.h>
int main()
{
int n;
int i;
scanf ("%d", &n);
for (i=2; i<n; i++)
{
if (n%i==0)
{
printf ("number is composite");
}
else
{
i=i+1;
}
}
printf("number is prime");
return 0;
}
您可以按如下方式修改循环 -
if(n%2==0 && n!=2){ //if 2's multiple is entered no need of loop just check this
printf("number is composite");
return 2; // for sake I just returned 2
}
for (i=3; i<n;i=i+2)
{
if (n%i==0) // if this is true
{
printf ("number is composite"); // print this
return 1; // return from function no further iterations
}
}
通过这种方式,您可以停止循环,因为 if
条件是 true
并且我们执行了其代码块中的代码。
当您发现该数字是合数时,您没有停止循环,因此合数会收到两条消息。
当 i
不是 n
的因数时,您将向 i
加 1,然后 for
循环再次加 1。这意味着对于每个 不是 的 n
因数的数字,您将跳过一个数字。
printf("number is prime");
没有被任何类型的 if 包围,所以它 总是 被打印,不管这个数字是否真的是质数。与人类不同,计算机在打印相互冲突的信息时不会三思而后行,因为计算机无法解释我们让它们执行的操作。
您可以通过检查更少的数字来优化您的代码。只检查数字的平方根。
此代码未经测试,但应该可以使用。请注意,这只会消除对平方根以上因子的检查,但 不会 先前检查因子的任何倍数(例如,这样写,程序将检查数字是否可被 2 整除,但也按 4、6、8、10 等)。
#include <stdio.h>
#include <math.h>
int main()
{
int n;
int i;
int isComposite = 0;
scanf ("%d", &n);
for (i = 2; i <= (int)sqrt((double)n); i++){
if (n % i == 0){
printf ("number is composite");
isComposite = 1;
break;
}
}
if (!isComposite){
printf("number is prime");
}
return 0;
}
综合所有建议和意见得出:
int q= (int) sqrt(n);
if (n%2==0)
{
printf ("number is composite"); // print this
return 1; // return from function no further iterations
}
for (i=3; i<=q; i += 2)
{
if (n%i==0) // if this is true
{
printf ("number is composite"); // print this
return 1; // return from function no further iterations
}
}
你得到 49 a s 复合的原因是因为这一行:
else
{
i=i+1;
}
这会导致您在检查中跳过奇数,而 49 是 7*7,因此您得到的输出是它是质数。
另一个问题是当你得到一个合数时你没有停止循环,并且在它结束时你将调用这行代码而不管循环中发生了什么。
printf("number is prime");
这里有一个更好的做法: 创建一个函数,如果它是素数,则 return 为 1,否则为 0。 如果你意识到这是一个合数,你应该立即return。如果你到达循环的末尾,它肯定是一个质数。 此外,您可以 运行 循环到 n 的平方根以获得更小的迭代次数,直到 n。 祝你好运
int isPrime(int n)
{
int i;
for (i = 2; i < (int) sqrt(n) ; i++)
{
if (n % i == 0)
{
printf("number is composite");
return 0;
}
}
printf("number is prime");
return 1;
}
您应该删除 i=i+1
行,您已经在 for (i=2; i<n; i++)
之后,你必须把你的条件放在循环之后,以防止在每次检查时打印结果。
#include <stdio.h>
int main()
{
int n;
int i;
scanf ("%d", &n);
for (i = 2; i<n; ++i)
{
if (n%i==0)
{
printf ("number is composite, divisible by %d\n", i);
break;
}
printf("i=%d\n", i);
}
if (n%i != 0)
printf("number is prime\n");
return 0;
}
给你。
#include <stdio.h>
int main( void )
{
while ( 1 )
{
unsigned int n = 0;
_Bool prime;
printf( "\nEnter a non-negative number (0-exit): " );
scanf( "%u", &n );
if ( !n ) break;
prime = n == 2 || ( n % 2 && n != 1 );
for ( unsigned i = 3; prime && i * i <= n; i += 2 )
{
prime = n % i;
}
printf( "Number %u is %s\n", n, prime ? "prime" : "composite" );
}
return 0;
}
如果依次进入
1 2 3 4 5 6 7 8 9 0
那么输出是
Enter a non-negative number (0-exit): 1
Number 1 is composite
Enter a non-negative number (0-exit): 2
Number 2 is prime
Enter a non-negative number (0-exit): 3
Number 3 is prime
Enter a non-negative number (0-exit): 4
Number 4 is composite
Enter a non-negative number (0-exit): 5
Number 5 is prime
Enter a non-negative number (0-exit): 6
Number 6 is composite
Enter a non-negative number (0-exit): 7
Number 7 is prime
Enter a non-negative number (0-exit): 8
Number 8 is composite
Enter a non-negative number (0-exit): 9
Number 9 is composite
Enter a non-negative number (0-exit): 0
另一种判断一个数是否为质数的方法是:-`
#include<stdio.h>
void main()
{
int no,i;
char x='y';
printf("Enter a number : ");
scanf("%d",&no);
for (i=2;i<=no/i;i++)
{
if(no%i==0)
{
x='n';
break;
}
}
if(x=='y')
printf("The number is a prime number. ");
else
printf("The number is not prime number. ");
}
这里的逻辑是将测试用例的数量限制为(被测数与循环计数器值的商),因为除数不能超过这个商。
#include <stdio.h>
int main(){
int intNumber=0;
int intCount=0;
printf("Enter Number :");
scanf("%d",&intNumber);
for(int i=1;i<=intNumber;i++){
if(intNumber%i==0){
intCount++;
}
}
if(intCount==2 && intNumber!=1){
printf("Number is prime");
}else{
printf("Number is not prime");
}
return 0;
}