|
发表于 2016-3-16 10:57:16
|
显示全部楼层
本帖最后由 ianv 于 2016-3-16 11:28 编辑
- #include<stdio.h>
- #include<stdlib.h>
- #include<math.h>
- #include<time.h>
- int isprime(unsigned long long int num)
- {
- unsigned long long int i=2;
- for (i;i<=(int)sqrt((double)num);i++)
- {
- if (num%i==0)
- return 0;
- }
- return 1;
- }
- int findmaxprimefactor(unsigned long long int num)
- {
- unsigned long long int Maxfactor=(int)sqrt((double)num);
- unsigned long long int lastfactor,factor;
- if (num%2==0)
- {
- lastfactor=2;
- num=num/2;
- while (num%2==0)
- num=num/2;
- }
- else
- lastfactor=1;
- factor=3;
- while((num>1)&&(factor<Maxfactor))
- {
- if ((num%factor==0)&&(isprime(factor)))
- {
- /*printf("%u\n",i);*/
- num/=factor;
- lastfactor=factor;
- while(num%factor==0)
- num/=factor;
- Maxfactor=(int)sqrt((double)num);
- }
- factor+=2;
- }
- if (num==1)
- return lastfactor;
- else
- return num;
- }
- int main()
- {
- double start, finish;
- start = clock();//取开始时间
- printf("%d",findmaxprimefactor(600851475143));
- finish = clock();//取结束时间
- printf( "\n%f seconds\n",(finish - start) / CLOCKS_PER_SEC);//以秒为单位显示之
- getchar();
- }
复制代码
0.013s |
|