【发布时间】:2019-02-15 00:45:16
【问题描述】:
我的代码有问题。题目是编写一个C程序,在用户输入的数字中找到最大的素数。
例如: 输入号码:46656665326
输出:66566653
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int is_prime(unsigned long long a)
{
if(a<=1)
return 0;
if(a==2)
return 1;
for(unsigned long long p=2; p<a; p++)
if(a%p==0)
return 0;
return 1;
}
unsigned long long find_largest_prime_number(unsigned long long number)
{
unsigned long long prime=0;
int count=0;
unsigned long long count2=1;
unsigned long long pom=0;
unsigned long long pom3=0;
pom3=number;
while(pom3!=0)
{
count++;
pom3/=10;
}
count++;
int pom_1=0;
while(pom_1<count)
{
count2*=10;
pom_1++;
}
pom=number;
while(count2>=10)
{
unsigned long long pom2=pom;
while(pom2!=0)
{
if(is_prime(pom2))
if(pom2>prime)
prime=pom2;
pom2/=10;
}
count2/=10;
pom=pom%count2;
}
return prime;
}
int main()
{
unsigned long long x=0;
printf("Enter number: ");
int n1=scanf("%llu", &x);
if(n1!=1)
{
printf("incorrect input");
return 1;
}
printf("%llu", find_largest_prime_number(x));
return 0;
}
问题是它适用于最大 13 位数字,但当输入数字超过 13 位时它会冻结。 前任。当我进入时它会冻结:215911504934497
请帮忙,代码有什么问题?
【问题讨论】:
-
@Blaze 不是 %llu 正确的 unsigned long long 吗? stackoverflow.com/questions/2844/…
-
您尝试过什么调试问题?执行到底卡在哪里了?
-
count或pom是否有问题,因为它们是整数,可能不足以支持超过 13 位的x? -
@NicoHaase 它适用于最大 13 位数字,但当输入数字超过 13 位时它会冻结。前任。当我输入时它会冻结:215911504934497,例如:imgur.com/271Ypy2(12 位数字,有效),imgur.com/EfoL2LQ(15 位数字,冻结)
-
@geekon 是的。代码完全正确。它的效率非常低,因此需要非常非常长的时间才能找出一个大数是否是素数。
标签: c