
展开全部
判断是否是质数最直观和简单的方法就是从2开始直接除,能除尽(余数为0)就不是质数。则C语言实现为:
int isprime(int m)
{
int i;
for(i=2;i<m;i++)
if(m%i==0)
return 0;
else
return 1;
}
该算法的时间复杂度O(n)。
可以改进一下,根据如果一个数是合数,那么它的最小质因数肯定小于等于它的平方根。用反证法可以证明一下。假设x是n的最小质因数,则存在n/x=p。p>x,x*p=n。如果x不小于等于它的平方根,则x*x>n,而p>x,故x*p>n,假设不成立。合数是与质数相对应的自然数。一个大于1的自然数如果它不是合数,则它是质数。也就是说如果一个数能被它的最小质因数整除的话,那它肯定是合数,即不是质数。所以判断一个数是否是质数,只需判断它是否能被小于它开跟号后的所有数整除,因此,这样做的运算少了很多,降低了时间复杂度。
int isprime(int m)
{
int i;
for(i=2;i<m;i++)
if(m%i==0)
return 0;
else
return 1;
}
该算法的时间复杂度O(n)。
可以改进一下,根据如果一个数是合数,那么它的最小质因数肯定小于等于它的平方根。用反证法可以证明一下。假设x是n的最小质因数,则存在n/x=p。p>x,x*p=n。如果x不小于等于它的平方根,则x*x>n,而p>x,故x*p>n,假设不成立。合数是与质数相对应的自然数。一个大于1的自然数如果它不是合数,则它是质数。也就是说如果一个数能被它的最小质因数整除的话,那它肯定是合数,即不是质数。所以判断一个数是否是质数,只需判断它是否能被小于它开跟号后的所有数整除,因此,这样做的运算少了很多,降低了时间复杂度。
展开全部
判断一个数是否是素数,用C语言怎么解决?
#include<stdio.h>
main()
{
char str1[80], str2[80];
printf("输入一个字符串:");
gets(str1);
Cpy(str1[], str2[]);
printf("输出一个字符串\n");
puts(str2);
}
void Cpy(char s[],char c[])
{
int i, j;
for(i=0; s[i]?!= '\0'; i++)
{
if(s[i]= 'a'||s[i]= 'A'||s[i]= 'e'||s[i]= 'E'|| s[i]= 'i'||s[i]= 'I'||s[i]= 'o'||s[i]= 'O'|| s[i]= 'u'||s[i]= 'U')
{
s[i]=c[j];
j++;
}
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
最笨的办法,将这个数用从2开始一直到这个数-1为止的所有数整除,只要被其中任何一个数整除后的余数是0,那么这个数就不是素数。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先是你的循环没加括号 作用范围有问题
再有就是你的逻辑问题 不能说余数不为0就不是素数,因为可能对其他数取余就是0
再有就是你的逻辑问题 不能说余数不为0就不是素数,因为可能对其他数取余就是0
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2010-11-25
展开全部
//---------------------------------------------------------------------------
#include <stdio.h>
#include <math.h>
int isprime(const unsigned int n) /*判断n是否为素数 ,是则返回1,否则返回0*/
{
unsigned int st=(int)floor(sqrt(n));
unsigned int i;
for (i=2; i<=st; i++)
if (n%i==0) return 0;
return 1;
}
int main(int argc, char* argv[])
{
unsigned int x;
printf("x=");
scanf("%u",&x); /*输入一个无符号整数*/
printf(isprime(x)?"YES\n":"NO\n"); /*调用isprime()函数判断x是否为素数,并输出相应的结果*/
return 0;
}
//---------------------------------------------------------------------------
#include <stdio.h>
#include <math.h>
int isprime(const unsigned int n) /*判断n是否为素数 ,是则返回1,否则返回0*/
{
unsigned int st=(int)floor(sqrt(n));
unsigned int i;
for (i=2; i<=st; i++)
if (n%i==0) return 0;
return 1;
}
int main(int argc, char* argv[])
{
unsigned int x;
printf("x=");
scanf("%u",&x); /*输入一个无符号整数*/
printf(isprime(x)?"YES\n":"NO\n"); /*调用isprime()函数判断x是否为素数,并输出相应的结果*/
return 0;
}
//---------------------------------------------------------------------------
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询