cupbbboom
发表于 2018-11-15 16:46:55
有没有跟我一样:先百度合数 、质数因子,然后就有了百度什么是质数?什么是因数?什么是整数、正整数?然后就......崩溃了,不想看下去{:9_219:}
996982937
发表于 2019-2-21 16:39:53
#include<stdio.h>
#include<math.h>
void main()
{
long unsigned int i,a;
int flag=1;
for(i=2;i<=(600851475143/2)&&i>1;i++)
{
if(600851475143%i==0)
{
for(a=2;a<=(long unsigned int)sqrt(i);a++)
{
if(i%a==0)
{
flag=0;
break;
}
}
if(flag==1)
{
printf("%d\n",i);
}
flag=1;
}
}
}
输出结果
71
839
1471
6857
大大大敏
发表于 2019-3-17 15:42:41
#include <stdio.h>
int main()
{
long long i,n;
scanf("%lld",&n);
for(i = 2; i <= n; i ++)/*从小数除起可以确保该数为质数所以不必判断是否为质数*/
{
while(n != i)
{
if(n % i == 0)
n = n / i;
else
break;
}
}
printf("%lld",n);
}
ietar
发表于 2019-4-17 21:38:59
python 6857
def p3():
import math
a = 600851475143
def is_prime(n):
if not n%2:
return False
n1 = int(math.sqrt(n))
for i in range(3,n1+1,2):
if not n%i:
return False
return True
# 肉眼可见2不是a的约数
def p3_1(n):
if is_prime(n):
return n
for i in range(3,a//3+1):
if not n%i:
return p3_1(n/i)
print(p3_1(a))
ietar
发表于 2019-4-18 12:22:09
python 6857
取约数算法优化 只取质数 记录取到的约数 i下次取约数从 i 开始
手写个轮子用来计时 优化效果很有限 可能要更大的数才见效
>>> timef(p3(),number=10000)
0.0010133860000109962
>>> timef(p3_mix(),number=10000)
0.000952252999979919
def p3_mix():
import math
a = 600851475143
def p3_get_prime(n):
return int(3*n+1+(math.sin(math.pi*n/2))**2)
def is_prime(n):
if not n%2:
return False
n1 = int(math.sqrt(n))
for i in range(3,n1+1,2):
if not n%i:
return False
return True
def p3_1_mix(n,num=1,i=2):
if is_prime(n):
return n
while i < a//2+1:
if not n%i:# n被i整除
return p3_1_mix(n/i,num,i)
else:# n无法被i整除
if i == 2:
i = 3
elif i == 3:
i = p3_get_prime(num)
else:
num += 1
i=p3_get_prime(num)
print(p3_1_mix(a))
doodu
发表于 2019-6-14 18:00:44
冷钟天 发表于 2016-7-4 15:57
n=600851475143
a=2
while n!=a:
1,为什么a递增以后的值,没有在素数范围内也行???
2,为什么不断缩小的n,不再使用比a小的值(素数)取商???
假如n初始为100,a初始为2:
n a
1, 100 2<--素数
2、 50 3<--素数
3、 50 4
4、 50 5<--素数
5, 10 6
6, 10 7<--素数
7, 10 8
8, 10 9
9, 10 10
11才是质数啊???
micolar
发表于 2019-6-20 21:55:33
C 不知道为啥不稳定 难道是虚拟机的原因?
#include<stdio.h>
int a;
int main(){
int i,j;
for(i = 2; i <= 500000;i++){
for(j = i * 2;j <=1000000;j += i)
a = 1;
}
for(i = 999999;i >= 2; i-- )
if(a == 0 && 600851475143%i == 0){
printf("%d",i);
return 0;
}
printf("600851475143");
return 0;
}
Weiwei7
发表于 2019-6-25 23:13:43
% %Euler_3What is the largest prime factor of the number 600851475143 ?
% % The prime factors of 13195 are 5, 7, 13 and 29.
x=input('please input a number\n');
l=0;
for i=3:2:x
if isprime(i)==1 && mod(x,i)==0
l=i;
x=x/i;
disp(l);
end
end
永恒的蓝色梦想
发表于 2019-8-3 10:01:17
本帖最后由 永恒的蓝色梦想 于 2020-7-30 13:20 编辑
num = 600851475143
divisor = 3
while num != 1:
if num % divisor:
divisor += 2
else:
num //= divisor
print(divisor)
RRRex
发表于 2019-8-6 18:07:13
#include <stdio.h>
#include <time.h>
#include <math.h>
int main()
{
int begin_time, end_time;
begin_time = clock();
int biggest = 0;
_Bool not_prime = 0;
for (int i = 3; i < sqrt(600851475143); i += 2)
{
if (600851475143 % i == 0)
{
for (int j = 3; j < sqrt(i); j += 2)
{
if (i % j == 0)
{
not_prime = 1;
break;
}
}
if (!not_prime)
{
biggest = i;
}
}
}
printf("600851475143 的最大质数因子是%d\n", biggest);
end_time = clock();
printf("\n程序一共运行%dms\n", end_time - begin_time);
return 0;
}
justjust001
发表于 2019-8-31 22:57:05
#include <stdio.h>
#include <time.h>
int main()
{
unsigned long long num = 600851475143;
unsigned long long a, t;
int begin = clock();
for (a = 2; a < num; a++)
{
for (t = 2; t < a / 2; t++)
if (a % t == 0)
break;
if ( t >= a / 2)
if (num % a == 0)
{
num /= a;
a = 1;
}
}
printf("600851475143 最大质数因子 = %llu\n", num);
int end = clock();
printf("time = %dms\n", end - begin);
system("pause");
return 0;
}
华博文
发表于 2019-9-26 17:13:04
import re
import math
import time
method = re.compile("[^0-9]")
def forma(miao):
tim = list()
ge_m = float("{:.10f}".format(miao))
ge_h = float("{:.10f}".format(ge_m / 3600))
ge_h_guo = float("{:.10f}".format(miao % 3600))
ge_f = float("{:.10f}".format(ge_h_guo / 60))
ge_miao = float("{:.10f}".format(ge_h_guo % 60))
if ge_h > 1:
tim.append(int(ge_h))
if ge_f > 1 or len(tim) != 0:
tim.append(int(ge_f))
tim.append(ge_miao)
return tim
da = int()
ran = input("请输入一个整数 , 求最大的质数因子:")
tex = method.search(ran)
if not tex:
ship = int(ran)#600851475143
chu = int(math.sqrt(ship))
time_start = time.perf_counter()
tiger_chu = sorted( , reverse = True)
rabbit_zhi = [ for each in sorted(tiger_chu , reverse = True)]
da = tiger_chu)]
miao = time.perf_counter() - time_start
lai = forma(miao)
if len(lai) == 1:
print("最大值为:" + str(da) + "\n运行时间为:{:.2f}秒".format(lai))
elif len(lai) == 2:
print("最大值为:" + str(da) + "\n运行时间为:{}分{}秒".format(lai , lai))
else:
print("最大值为:" + str(da) + "\n运行时间为:{}时{}分{}秒".format(lai , lai , lai))
else:
print("您输入的数值运行不了~~")
{:10_256:}#我感觉我的效率还不错,欢迎大家来copy~~
天云TY
发表于 2019-10-4 16:26:59
import tkinter as tk
x = 600851475143
i = 2
while True:
if i >= x:#当i > x时,x铁定除不尽i(当i = x 时,它就没意义了),所以执行下列命令:
break
while x % i == 0: #当x % i == 0
if i >= x:#当i > x时,x铁定除不尽i(当i = x 时,它就没意义了),所以执行下列命令:
break
else:
x /= i
else:
i += 1
s = tk.Tk();tk.Label(s,text=x).pack();s.mainloop() #显示出答案
1666194196
发表于 2019-10-8 16:31:53
#include <stdio.h>
void main(){
//13195的所有质因数为5、7、13和29。
//600851475143最大的质因数是?
int i,a=13195,max=0;
for(i=2;i<a;i++){//2到它本身-1的循环
if(a%i==0){//如果能整除说明是他的因数
int j,flag=1;
for(j=2;j<i;j++){//2到它本身-1的循环
if(i%j==0){//如果能整除说明有因数 ,标志为假 ,不输出
flag=0;
}
}
if(flag){//如果没有能整除顺序执行下来flag=1,为真。打印出这个数
printf("质因数%d\n",i);
max=i;
}
}
}
printf("做大质因数=%d",max);
}
带上面具的孩纸
发表于 2019-10-19 11:50:29
本帖最后由 带上面具的孩纸 于 2019-10-19 11:51 编辑
int main()
{
unsigned long long int MPX;
int MAX = 1;
int i;
printf("\nplease input number: ");
scanf("%llu",&MPX);
for(i = 2;i < MPX;i++)
{
if(MPX % i == 0)
{
MAX = MAX > i ? MAX : i;
// printf("%d\t",i);
}
}
printf("\n MAX=%d\n",MAX);
return 0;
}
如有错误 请指正
杨扬阳羊洋
发表于 2019-12-18 22:24:48
unsigned long long isprime(unsigned long long num)
{
unsigned long long max=0;
for(unsigned long long i=2;i<=(int)sqrt((double)num);i++)
{
if( (num%i)==0 ){return 0;}
}
return 1;
}
unsigned long long max_factor(unsigned long long num)
{
unsigned long long max=0,temp=0;
for(unsigned long long j=2;j<=(int)sqrt((double)num);j++)
{
int n=0;
if(num%j==0) // 找出合数中的因子
{
if( isprime(j)==1 )
{
if(max<j){max=j;printf("prime=%llu\n",j);}
}
temp=num/j;
if( isprime(temp)==1 )
{
if(max<temp){max=temp;printf("prime=%llu\n",temp);}
}
}
}
return max;
}
guoquanli
发表于 2019-12-31 14:56:35
游客 218.17.207.x 发表于 2015-10-30 16:07
大数用了__int64类型
输出结果:
非常感谢您的分享,请教您一下,我在linux环境下运行您的这段代码提示:unknowntypename '__int64',头文件<math.h>也包含了,问题在哪里了?{:5_110:}
就是要努力呀
发表于 2020-1-19 19:51:48
#include <stdio.h>
#include <time.h>
int main(void)
{
int i = 2;
long int a = 600851475143;
time_t start, end;
time(&start);
while(a > 1)
{
if(a % i == 0)
{
a /= i;
continue;
}
i++;
}
time(&end);
printf("%ld的最大质因数为:%d\n", a, i);
printf("time:%ld\n", end - start);
return 0;
}
~
就是要努力呀
发表于 2020-1-19 20:02:03
#include <stdio.h>
#include <time.h>
int main(void)
{
int i = 2;
long int a = 600851475143;
time_t start, end;
time(&start);
while(a > 1)
{
if(a % i == 0)
{
a /= i;
}
else i++;
}
time(&end);
printf("600851475143的最大质因数为:%d\n", i);
printf("time:%ld\n", end - start);
return 0;
}
代号-K
发表于 2020-3-11 20:57:10
这与第七题 类似,只做稍微修改即可得出答案 :6857
int calculatePrime(long long value)
{
int array = {0};
array = 2;
int i = 1;
int j = 3;
int k = 0;
int yes = 1;
while(true)
{
if(array >= value)
{
break;
}
else
{
k = 0;
while( k < i)
{
if(j % array == 0)
{
yes = 0;
break;
}
k++;
}
if(yes && value % j == 0)
{
value /= j;
array = j;
}
}
j++;
yes = 1;
}
return array;
}
int main(int argc, char *argv[])
{
int sum = calculatePrime(600851475143);
printf("%d\n",sum);
return 0;
}