C语言,质因数分解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言,质因数分解相关的知识,希望对你有一定的参考价值。

已知正整数 n是两个不同的质数的乘积,试求出较大的那个质数 。
对于60%的数据,6≤n≤1000。
对于100%的数据,6≤n≤2*109。
#include <stdio.h>
long int fun(long int x)
long int q;
for(q=2;q*q<=x;q++) if(x%q==0)break;
if(q*q<x) return 0;
if(q*q>=x) return 1;

int main()
long int n,i;
scanf("%d",&n);
for (i=n;i>=0;i--)
if(n%i==0&&fun(i)) break;

printf("%ld",i);
return 0;

有几个总是超时,为什么??

//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
bool prime(long n)
long i;
if(n<2) return false;
if(n==2 || n==3) return true;
if(!(n&1)) return false;
for(i=3; i*i<=n;i+=2)
if(!(n%i)) return false;
return true;

long fact_maxer(long x)
long i=x>>1;
for(i&1 ? i=i : i++;i>2;i-=2)
if(!(x%i) && prime(i))
if(prime(x/i)) return i;
else break;
if(!(x&1) && prime(i=x>>1)) return i;
return 0;

void main(void)
long n,f;
scanf("%d",&n);
if(f=fact_maxer(n))
printf("Larger prime number is %d.\n",f);
else printf("%d is not the product of two primes.\n",n);

试试这个……
参考技术A

    我一直写long型都直接是long n,i;没用过long int n,i;

    long型用%ld输入输出,我觉得比较规范;

    fun里的for结束后两个if的条件好像和for本身循环判定不符,我觉得应该是q*q <= x;和q*q > x;

而且这种写法不很推荐。

追问

还是超时呀

追答

能让我看下你的报错截图吗?
for(q=2; q*qx)

return 1;

return 0;
这是我写的fun里的循环,而且推荐你以后写东西别直接运行先编译,看有没有警告,不仅仅是出错才修改。

以上是关于C语言,质因数分解的主要内容,如果未能解决你的问题,请参考以下文章

c语言质因数分解题目怎么做

c语言程序编程(分解质因数)

C语言分解质因数

c语言求分解质因数

c语言分解质因数的问题

C语言算法之分解质因数