c语言中判断一个正整数是否为素数,若是素数则输出该素数,若不是则输出该数所有的因子

#include<stdio.h>
#include<math.h>
void main()
{
int m,i,k,a;
printf("请输入一个一个整数 :");
scanf("%d",&m);
k=(int)sqrt(m);
for(i=2;i<=k;i++)
{if(m%i==0)
{ a=m/i;
printf("%d,%d\n",a,i);
}
else
{for(i=2;i<=k;i++)

{if(m%i==0);break;
if(i>k)
printf("%d 是一个素数\n",m);
}

}
}
//错在哪了,怎么改啊。

普通判断素数,只要找到因数时就会用break结束判断,这里就用个标志来表明找到了因数而继续找下一个因素即可,最后根据标志来判断是否素数。另外,由于m/2一般会稍大于根号m所以用这个取代调用sqrt函数,如果要调用要写:k=sqrt((double)m);。

#include<stdio.h>
void main()
{ int i,k,m,a;
printf("请输入一个一个整数 :");
scanf("%d",&m);
for ( i=2,a=1;i<m/2;i++ ) if ( m%i==0 ) { printf("%d ",i); a=0; }
if ( a ) printf("%d是一个素数\n",m); else pritf("\n");
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-04-07
#include <stdio.h>
#include <math.h>

int isPrime(int n) {
int i,flag = 1;
if(n < 2) return 0;
for(i = 2; i < sqrt(n) && flag; ++i)
if(n % i == 0) flag = 0;
return flag;
}

int main() {
int m,i,a;
printf("请输入一个正整数:");
scanf("%d",&m);
if(isPrime(m)) printf("%d是一个素数\n",m);
else {
for(i = 2;i <= (int)sqrt(m);i++) {
if(m%i == 0) {
a = m/i;
printf("%d,%d\n",i,a);
}
}
}
return 0;
}

第2个回答  2014-04-08
//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
bool prime(int n){
int i;
if(n>2 && !(n&1) || n<2) return false;
for(i=3; i*i<=n;i+=2)
if(!(n%i)) return false;
return true;
}
void main(void){
int nDec,i,n=2;
printf("Type an integer...\nn=");
scanf("%d",&nDec);
if(nDec==1){
printf(" 1 is no primer or sum...\n");
return;
}
if(!prime(nDec)){
printf("%d = ",nDec);
while(!prime(nDec))
for(i=n;;i==2 ? i++ : i+=2){
if(!prime(i)) continue;
if(!(nDec%i)){
printf("%d x ",n=i);
nDec/=i;
break;
}
}
printf("%d.\n",nDec);
}
else printf("%d is a primer!\n",nDec);
}
第3个回答  2014-04-08
#include<stdio.h>
#include<math.h>
void main()
{
int m,i,j=2,k;
printf("请输入一个一个整数 :");
scanf("%d",&m);
k=(int)sqrt(m);
for(i=2;i<=k;i++)
    {
if(m%i==0)
{
printf("%d=",m);
while(m!=1)
{
if(m%j==0)
{
m/=j;
printf("%d",j);
if(m!=1)printf("*");
j=1;
}
j++;
}
printf("\n");
return;
}
}
printf("%d 是一个素数\n",m);
}

相似回答