problemscpp
A collection of my answers to algorithm problems in c++.
静态 Public 成员函数 | 所有成员列表
luogu::P1217类 参考

洛谷 P1217 [USACO1.5]回文质数 Prime Palindromes 更多...

#include <luogu.h>

静态 Public 成员函数

static int main (istream &cin, ostream &cout)
 

详细描述

洛谷 P1217 [USACO1.5]回文质数 Prime Palindromes

在文件 luogu.h297 行定义.

成员函数说明

◆ main()

int luogu::P1217::main ( istream &  cin,
ostream &  cout 
)
static

在文件 luogu.cpp802 行定义.

802 {
803 unsigned int a;
804 unsigned int b;
805 cin >> a >> b;
806 auto palindromes = set<unsigned int>();
807 if(a <= 2 && 2 <= b) {
808 palindromes.insert(2);
809 }
810 if(a <= 10 && b >= 0) {
811 for(unsigned int d1 = 3; d1 <= 9; d1 += 2) {
812 //1 [0,10]
813 unsigned int palindrome = d1;
814 if(a <= palindrome && palindrome <= b) {
815 palindromes.insert(palindrome);
816 }
817 }
818 }
819 if(a <= 100 && b >= 10) {
820 for(unsigned int d1 = 1; d1 <= 9; d1 += 2) {
821 //2 [10,100]
822 unsigned int palindrome = d1 * 10 + d1;
823 if(a <= palindrome && palindrome <= b) {
824 palindromes.insert(palindrome);
825 }
826 }
827 }
828 if(a <= 1000 && b >= 100) {
829 for(unsigned int d1 = 1; d1 <= 9; d1 += 2) {
830 //3 [100,1000]
831 for(unsigned int d2 = 0; d2 <= 9; d2++) {
832 unsigned int palindrome = d1 * 100 + d2 * 10 + d1;
833 if(a <= palindrome && palindrome <= b) {
834 palindromes.insert(palindrome);
835 }
836 }
837 }
838 }
839 if(a <= 10000 && b >= 1000) {
840 for(unsigned int d1 = 1; d1 <= 9; d1 += 2) {
841 //4 [1000,10000]
842 for(unsigned int d2 = 0; d2 <= 9; d2++) {
843 unsigned int palindrome = d1 * 1000 + d2 * 100 + d2 * 10 + d1;
844 if(a <= palindrome && palindrome <= b) {
845 palindromes.insert(palindrome);
846 }
847 }
848 }
849 }
850 if(a <= 100000 && b >= 10000) {
851 for(unsigned int d1 = 1; d1 <= 9; d1 += 2) {
852 //5 [10000,100000]
853 for(unsigned int d2 = 0; d2 <= 9; d2++) {
854 for(unsigned int d3 = 0; d3 <= 9; d3++) {
855 unsigned int palindrome = d1 * 10000 + 1000 * d2 + 100 * d3 + 10 * d2 + d1;
856 if(a <= palindrome && palindrome <= b) {
857 palindromes.insert(palindrome);
858 }
859 }
860 }
861 }
862 }
863 if(a <= 1000000 && b >= 100000) {
864 for(unsigned int d1 = 1; d1 <= 9; d1 += 2) {
865 //6 [100000,1000000]
866 for(unsigned int d2 = 0; d2 <= 9; d2++) {
867 for(unsigned int d3 = 0; d3 <= 9; d3++) {
868 unsigned int palindrome = d1 * 100000 + d2 * 10000 + d3 * 1000 + d3 * 100 + d2 * 10 + d1;
869 if(a <= palindrome && palindrome <= b) {
870 palindromes.insert(palindrome);
871 }
872 }
873 }
874 }
875 }
876 if(a <= 10000000 && b >= 1000000) {
877 for(unsigned int d1 = 1; d1 <= 9; d1 += 2) {
878 //7 [1000000,10000000]
879 for(unsigned int d2 = 0; d2 <= 9; d2++) {
880 for(unsigned int d3 = 0; d3 <= 9; d3++) {
881 for(unsigned int d4 = 0; d4 <= 9; d4++) {
882 unsigned int palindrome = d1 * 1000000 + d2 * 100000 + d3 * 10000 + d4 * 1000 + d3 * 100 + d2 * 10 + d1;
883 if(a <= palindrome && palindrome <= b) {
884 palindromes.insert(palindrome);
885 }
886 }
887 }
888 }
889 }
890 }
891 if(a <= 100000000 && b >= 10000000) {
892 for(unsigned int d1 = 1; d1 <= 9; d1 += 2) {
893 //8 [10000000,100000000]
894 for(unsigned int d2 = 0; d2 <= 9; d2++) {
895 for(unsigned int d3 = 0; d3 <= 9; d3++) {
896 for(unsigned int d4 = 0; d4 <= 9; d4++) {
897 unsigned int palindrome = d1 * 10000000 + d2 * 1000000 + d3 * 100000 + d4 * 10000 + d4 * 1000 + d3 * 100 + d2 * 10 + d1;
898 if(a <= palindrome && palindrome <= b) {
899 palindromes.insert(palindrome);
900 }
901 }
902 }
903 }
904 }
905 }
906 for(const auto palindrome: palindromes) {
907 bool is_prime = true;
908 for(unsigned int i = 3; i <= sqrt(palindrome); i++) {
909 if(palindrome % i == 0) {
910 is_prime = false;
911 break;
912 }
913 }
914 if(is_prime) {
915 cout << palindrome << endl;
916 }
917 }
918 return 0;
919 }
bool is_prime(int n)
Definition: pat.cpp:2077

引用了 pat::b::b1059::is_prime().

被这些函数引用 luogu::TEST().


该类的文档由以下文件生成: