c语言,读入一个整数k(2<=k<=10000),输出它的所有质因子
发布网友
发布时间:2023-09-07 15:48
我来回答
共5个回答
热心网友
时间:2023-09-17 11:32
声明一个int型变量i,在2至i*i<=k的范围内遍历,当i能够整除k时,判断i和k/i二者是不是质数,是则输出i和(或)k/i,这样就达到题目要求了。举例代码如下:
//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
int prime(int n){//自定义判断质数的函数
int i;
if(n>2 && !(n&1) || n<2)return 0;
for(i=3; i*i<=n;i+=2)
if(!(n%i)) return 0;
return 1;
}
int main(void){
int k,x,i;
while(1){//保证输入的k是符合要求的
printf("Enter a positive integer k(1<k<=10001)...\nk=");
if(scanf("%d",&k),k>1 && k<10001)
break;
printf("Error, redo: ");
}
for(x=0,i=2;i*i<=k;i++)
if(k%i==0){//在i整除k的情况下
if(prime(i))//i是质数就输出i
printf("%d ",i);
if(prime(x=k/i))//k/i是质数就输出k/i
printf("%d ",x);
}
if(!x) printf("%d",k);//没有整除k的i,说明k是质数
printf("\n");
return 0;
}
热心网友
时间:2023-09-17 11:33
1、m代表的应该是开关 你这个函数虽然没有写返回类型 但是应该是bool类型或者int类型的返回值,当m=0时返回代表你所以输入的n值不是质数,m=1时代表你输入的值是质数。
2、n代表你要输入的值(判断是否是质数),这个函数不是产生质数的,而是判断你输入进去的n值是否是质数。
下面给你整段注释下 希望对你有帮助:
IsPrime ( int n )//前面最好有个int或者bool类型的返回值,判断输入的n是否是质数
{
int i, m; //m定义出来是相当于一个开关,具体见下
m=1; //m=1时相当于开着 如果最终返回的就是1代表这个是质数
for(i=2;i<n;i++) //用n除以2--n-1的余来判断是否是质数
if (!(n%i)) //这个等价于if(n%i==0)就是有等于0的余数就代表这个数已经不是质数了,因为可以被i这个数整数了
{
m=0; //当n不是质数 就将m设置成0;这样可以将m值返回 在外面通过返回值来判断是否是质数
break;
}
return(m);
}
热心网友
时间:2023-09-17 11:33
1.m是用来标记的,m=1代表n是质数,m=0代表不是质数.
2.n代表要判断的数
3.相当于if(n%i==0) 如果n除i的余数为0,说明n不是质数,那就return 0;
IsPrime ( int n )
{
int i, m;
m=1;
for(i=2;i<n;i++)
if (!(n%i))//n%i=0,说明n不是质数,返回0;
{
m=0;
break;
}
return(m);//m=1代表n是质数,m=0代表不是质数
}
热心网友
时间:2023-09-17 11:34
IsPrime ( int n )
{
int i, m;
m=1; //m就是一个标记为,开始标记为1
for(i=2;i<n;i++)
if (!(n%i)) //如果找到2到n-1,有一个数,可以被m求余为0,那么这个数就不是质数了
{
m=0; //如果不是质数,m标记为0
break;
}
return(m);
}
1. 上面解释了,是个标记位
2.n代表一个质数,就是检查n
热心网友
时间:2023-09-17 11:34
IsPrime ( int n )
{
int i, m; /*m是n是否为质数的标志,1表示n是质数,0表示n不是质数*/
m=1;
for(i=2;i<n;i++) /*判断n能否被小于n的数整除*/
if (!(n%i)) /* !(n%i)表示n mod i取余,余数为0,则n可被i整除*/
{
m=0; /*n可被i整除,故n不是质数,m=0*/
break;
}
return(m);
}