用筛法把要用到的素数求出来,存放到一个数组中备用.然后才对目标数进行质因数分解.OJ上的一道题 就是输入一个数进行质因数分解.求好的算法呀.我的总是超时的.#include
#include
int main()
{
int a[70001],b[500];
int i,j,num,count=0,state=0;
for(i=2;i
人气:497 ℃ 时间: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); }}
推荐
猜你喜欢
- 如图,正方形的边长为8cm,一个半径为1cm的圆沿着正方形各边的内侧滚动一周,求圆滚过的区域的面积.
- 先化简,再求值:1/a-(a^2-4)/(a^2+a-2)*(a-1)/(a^2+a-6),其中a是方程x^2+3x-1=0的一个根
- 三种饮料共65瓶,A饮料2人一瓶,B饮料3人一瓶,C饮料4人一瓶,有多少人喝饮料?
- 当速度为零时,为什么加速度不一定为零,我感觉加速度一定为零,因为速度为零时,物体就是静止的,所以它就没有加速度
- 有了圆面积怎么算直径半径周长
- 如果想参加篮球俱乐部 英文怎样拼写
- a的-p次方等于a的p次方分之1怎么用语言叙述
- 一块平行四边形菜地,底是4点5米,比高的2倍少2米,这块地的高是多少米