Task
Cho trước một xâu S, trong xâu này có thể chứa chữ số. Hãy tìm và in ra tất cả các số nguyên tố có chứa trong xâu.
Input
• Gồm một xâu có độ dài không quá 500 ký tự. Các số có thể chứa trong xâu luôn nhỏ hơn hoặc bằng 1000.
Output
• In ra các số nguyên tố có trong xâu, mỗi số trên một dòng.
Samples
input 97 Pellentesque 15 sagittis metus, nec 2.
output 97 2
Code:
#include <bits/stdc++.h>
#include <string.h>
#include <iostream>
using namespace std;
bool nguyento(int n)
{
if(n<=1)
return false;
if(n<=3)
return true;
if(n%2==0 || n%3==0)
return false;
for(int i=5;i*i<=n;i=i+6)
if(n%i==0 || n%(i+2)==0)
return false;
return true;
}
int convert(int c)
{
if(c == 48)
return 0;
if(c == 49)
return 1;
if(c == 50)
return 2;
if(c == 51)
return 3;
if(c == 52)
return 4;
if(c == 53)
return 5;
if(c == 54)
return 6;
if(c == 55)
return 7;
if(c == 56)
return 8;
if(c == 57)
return 9;
}
long long convert_number(int a[],int n)
{
long long sum = 0 , k = n - 1;
for(int i = 0 ; i < n ; i++)
{
sum = sum + a[i]*pow(10,k);
k--;
}
return sum;
}
int main()
{
char *s = new char[501];
gets(s);
int x = 0 , b[100000], c[100000] , count = 0, t = 0, k , j = 0;
for(int i = 0 ; i < strlen(s) ; i++)
{
if(*(s+i) == '.' || *(s+i) == ',' || *(s+i) == ':' || *(s+i) == ' ')
{
if(t >= 1)
{
k = convert_number(c,j);
b[x++] = k;
j = 0;
count = 0;
}
}
if(*(s+i) >= 'a' && *(s+i) < 'z' || *(s+i) >= 'A' && *(s+i) <= 'Z' || *(s+i) >= '0' && *(s+i) <= '9')
{
count++;
if(*(s+i) >= '0' && *(s+i) <= '9')
c[j++] = convert((int)*(s+i));
if(count == 1)
t++;
}
}
if(*(s+strlen(s)-1) != ',' , *(s+strlen(s)-1) != ':' , *(s+strlen(s)-1) != ':' , *(s+strlen(s)-1) != ' ')
{
int f = convert_number(c,j);
b[x++] = f;
}
for(int i = 0 ; i < x ; i++)
{
if(nguyento(b[i]) == 1)
cout<<b[i]<<endl;
}
return 0;
}