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 "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语言,质因数分解的主要内容,如果未能解决你的问题,请参考以下文章