计算质数

This commit is contained in:
tursom 2018-02-09 13:18:00 +08:00
commit 0484b05b68
7 changed files with 113 additions and 0 deletions

View File

@ -0,0 +1,29 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<Objective-C-extensions>
<file>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Import" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Macro" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Typedef" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Enum" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Constant" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Global" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Struct" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="FunctionPredecl" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Function" />
</file>
<class>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Property" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Synthesize" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InitMethod" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="StaticMethod" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InstanceMethod" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="DeallocMethod" />
</class>
<extensions>
<pair source="cpp" header="h" fileNamingConvention="NONE" />
<pair source="c" header="h" fileNamingConvention="NONE" />
</extensions>
</Objective-C-extensions>
</code_scheme>
</component>

4
.idea/misc.xml Normal file
View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
</project>

8
.idea/modules.xml Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/prime_numbers_c.iml" filepath="$PROJECT_DIR$/.idea/prime_numbers_c.iml" />
</modules>
</component>
</project>

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<module classpath="CMake" type="CPP_MODULE" version="4" />

6
.idea/vcs.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

7
CMakeLists.txt Normal file
View File

@ -0,0 +1,7 @@
cmake_minimum_required(VERSION 3.9)
project(prime_numbers_c C)
set(CMAKE_C_STANDARD 99)
add_executable(prime_numbers_c main.c)
target_link_libraries(prime_numbers_c m)

57
main.c Normal file
View File

@ -0,0 +1,57 @@
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
unsigned int getPrimeNumbers(unsigned int maxnum, unsigned int *buff, unsigned int buffsize) {
unsigned int sqmax = (unsigned int) sqrt(maxnum);
unsigned int numbers = 1;
buff[0] = 2;
int flag = 1;
for (unsigned int i = 3; i <= maxnum; i += 2) {
unsigned int sqi = (unsigned int) sqrt(i);
for (unsigned int n = 0; buff[n] <= sqi; n++)
if (i % buff[n] == 0)
flag = 0;
#ifdef _DEBUG_
if (!(i % 10000000))
printf("%u\n", i);
#endif
if (flag) {
buff[numbers] = i;
numbers++;
if (numbers == buffsize)
break;
}
flag = 1;
}
return numbers;
}
int main(int argc, char *argv[]) {
if (argc <= 1)
return 1;
unsigned int maxnum = 0;
if (argc > 1) {
if (atol(argv[1]) < 2)
return 2;
maxnum = (unsigned int) atol(argv[1]);
}
int output = 1;
if (argc > 2) {
output = atoi(argv[2]);
}
unsigned int buffsize = (unsigned int) (maxnum / log(maxnum) * (maxnum > 200000 ? 1.1 : 1.3));
#ifdef _DEBUG_
printf("buff size:%u\n", buffsize);
#endif
unsigned int *buff = malloc(sizeof(unsigned int) * buffsize);
unsigned int numbers = getPrimeNumbers(maxnum, buff, buffsize);
if (output)
for (int i = 0; i < numbers; i++)
printf("%u\n", buff[i]);
printf("%u numbers\n", numbers);
return 0;
}