> 其他 >
用筛法把要用到的素数求出来,存放到一个数组中备用.然后才对目标数进行质因数分解.OJ上的一道题 就是输入一个数进行质因数分解.求好的算法呀.我的总是超时的.#include
#include
int main()
{
int a[70001],b[500];
int i,j,num,count=0,state=0;
for(i=2;i
人气:283 ℃ 时间:2020-04-14 21:45:44
解答
筛选算法优化一下,用10内的素数筛选100内的素数,再用结果筛选10000内的,以此类推,用单链表省去数组往前挪的时间,在不懂我看看什么时间有空再帮你吧大牛,能具体点吗?貌似很不错呀!!!!!(我刚用了你说的方法,没用到链表,因为看不懂,还是超时呀。Sample Input90 6 7 Sample Output2 3 3 5 2 3 1 7 Hint这题对很多初学者比较难一点。这里给一些提示吧:如果要代码的速度够快,不妨(用筛法)把要用到的素数求出来,存放到一个数组中备用。然后才对目标数进行质因数分解。以前做的,我也不知道会不会超时,vc++ 6.0 编译通过# include#include#includetypedef struct node{int k;struct node *next;}linklist;linklist * init(linklist *l){ l=(linklist *)malloc(sizeof(linklist)); l->next=NULL; return l;}linklist * shaixuan(linklist *l,linklist **w,int low,int high){linklist *p,*q;int k,i;for(i=low;i<=high;i++){k=0;q=l; while(q->k<=sqrt(i)) { if(i%(q->k)==0) {k=1;break;}q=q->next; } if(k==1) continue; else { p=init(p); p->k=i; (*w)->next=p;(*w)=p; } } return l;}voidmain(){ linklist *l,*w,*q; int num,c=2,high,count; l=init(l); w=l; l->k=2;while(1){ scanf("%d",&num); high=sqrt(num);if(ck<=sqrt(num)&&num>0){if(num%(q->k)==0) {printf("%d ",q->k);num=num/q->k;count++;}else q=q->next; }if(count==0) printf("%d %d",1,num);else printf("%d",num); }}
推荐
猜你喜欢
© 2024 79432.Com All Rights Reserved.
电脑版|手机版