【发布时间】:2021-02-03 17:47:02
【问题描述】:
我编写了一个 c 程序来检查一个数字是否是可截断的素数。但它不起作用。 num_digit 用于计算位数,prime_check 用于检查一个数是否为素数。我对C不太了解,我是初学者。
#include<stdio.h>
#include<math.h>
// to check left truncated prime numbers
int main()
{
int num,flag=0;
printf("enter a number\n");
scanf("%d", &num);
while (num>0)
{
if (prime_check(num)==1) // 1 = true
{
int y=num_digit(num);
num = num-((num/pow(10,(y-1)))*pow(10,(y-1)));
}
else
{
flag=1;
break;
}
}
if (flag==0) printf("Congrats, its a left truncated prime number");
else printf("nope no never\n");
}
int prime_check(int n)
{
int i,flag=0;
if (n<=1) return 0;
else if (n<=3) return 1;
else
{
for (i=2;i<=sqrt(n);i++)
{
if(n%i==0)
{
flag=1;
break;
}
}
}
if(flag==0) return 1;
else return 0;
}
int num_digit(int n)
{
int i,x=0;
for (i=1;n!=0;i++)
{
n=n/10;
x++;
}
return x;
}
谁能建议我哪一步是错的?它所做的只是检查数字是否为质数。
【问题讨论】:
-
pow(10, 3)可能会返回类似999.99999999675321的内容。也许将它四舍五入,或者更好(??),编写你自己的 integer 幂函数 -
@Aman Kumar 语句 x=1 中使用的变量 x 在哪里?宣布?
-
for (i=2;i<=sqrt(n);i++)可能有 FP 截断问题。建议for (i=3;i<=n/i;i+=2) -
@VladfromMoscow 我的错,它不是 x,它实际上是“标志”。顺便说一句,它仍然不起作用。
-
@pmg 你能推荐一种写幂函数的方法
标签: c expression primes integer-arithmetic function-definition