Đây là tuyên bố vấn đề:Số dự án Euler 37
Số 3797 có một thuộc tính thú vị. Là nguyên tố chính nó, có thể liên tục loại bỏ các chữ số từ trái sang phải, và vẫn giữ nguyên ở mỗi giai đoạn: 3797, 797, 97 và 7. Tương tự chúng ta có thể làm việc từ phải sang trái: 3797, 379, 37 và 3.
Tìm tổng của mười một số nguyên tố chỉ có thể cắt từ trái sang phải và phải sang trái.
LƯU Ý: 2, 3, 5 và 7 không được coi là số nguyên tố cắt ngắn.
Mã của tôi cung cấp cho tôi một phần đầu ra. Chỉ có 5 hoặc 6 trong số mười một số nguyên tố bắt buộc được xuất ra, 3797 không phải là một trong số đó. Vì vậy, để tìm lỗi, tôi bằng tay (trên một mảnh giấy) chạy mã cho 3797 và bằng cách nào đó không thể quản lý để tìm thấy trục trặc.
Tôi nghĩ rằng lỗi ở phần thứ hai, phần mã kiểm tra xem con số có cắt xén từ bên trái hay không.
Code:
#include<stdio.h>
int isprime(int n) //Checks whether the number is prime or not
{
int i;
if(n==1)
return(0);
for(i=2;i<n/2+1;i++)
{
if(n%i==0)
{
return(0);
break;
}
}
return(1);
}
int main(void)
{
int count=0,z=0;
int i;
int n;
int x=1;
int reverse2=0;
int z1=0;
int p;
int count1=0;
int digit;
int k=1000000;
int reverse=0;
for(i=2;i<k;i++)
{
if(isprime(i)==1)
{
n=i;
p=i;
while(n>0) // This function removes the digits of the prime number from the right
{
n=n/10;
if(isprime(n)==1)
{
count++;
}
z++;
}
if(z==count)
{
while(p>0) //Checks whether number is left truncatable
{
digit=p%10;
p=p/10;
if(z1==0)
{
reverse=digit;//here reverse doesn't refer to reversing the number. It builds the number one digit at a time from right to left.
}
else
{
reverse=digit*x*10+reverse;
x++;
}
if(isprime(reverse)==1)
{
count1++;
}
z1++;
}
if(z1==count1)
printf("%d ",i);
}
z=0;
z1=0;
count1=0;
count=0;
reverse=0;
reverse2=0;
x=1;
}
}
}
Có lỗi, không được x ++ nhưng x = x * 10. Xin lỗi :) –
Lưu ý rằng nó sẽ hoạt động nhanh hơn nhiều nếu trong 'isprime' bạn chỉ xem xét những' i' thỏa mãn 'i * i <= n'. Vì '2' là số nguyên tố duy nhất, bạn cũng có thể thêm một dấu kiểm cho 2 và bắt đầu từ' 3' trong 'for', có' 2' thay vì '1' làm tăng. Tôi cho rằng nó sẽ nhanh hơn 100 ms. –