写一个判断素数的函数ifp。在主函数中调用该函数,输出整型数组a[10] 中的每个素数,并统计素数的个数和所有素数的和。
时间: 2024-04-29 10:21:19 浏览: 19
以下是Python代码实现:
```python
def ifp(n):
if n < 2:
return False
for i in range(2, int(n**0.5)+1):
if n % i == 0:
return False
return True
a = [23, 45, 67, 89, 12, 34, 56, 78, 90, 11]
count = 0
sum = 0
for i in a:
if ifp(i):
print(i)
count += 1
sum += i
print("素数个数:", count)
print("素数总和:", sum)
```
输出结果为:
```
23
67
89
11
素数个数: 4
素数总和: 190
```
相关问题
写c函数,从给定的输入文本文件中按行读入,并按行写入给定的输出文件中。要求:1)去除每行的前导空格或制表符。2)每行前加行号。
好的,可以试试以下的C代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
if (argc < 3) {
fprintf(stderr, "Usage: %s input_file output_file\n", argv[0]);
return 1;
}
FILE *ifp = fopen(argv[1], "r");
if (!ifp) {
fprintf(stderr, "Cannot open input file %s\n", argv[1]);
return 1;
}
FILE *ofp = fopen(argv[2], "w");
if (!ofp) {
fprintf(stderr, "Cannot open output file %s\n", argv[2]);
fclose(ifp);
return 1;
}
char *line = NULL;
size_t len = 0;
ssize_t read;
int lineno = 1;
while ((read = getline(&line, &len, ifp)) != -1) {
int i;
for (i = 0; i < read; i++) {
if (line[i] != ' ' && line[i] != '\t') break;
}
fprintf(ofp, "%d\t%s", lineno++, line+i);
}
free(line);
fclose(ifp);
fclose(ofp);
return 0;
}
```
使用时可以在命令行输入:
```
$ ./program input.txt output.txt
```
其中 `program` 为编译后的可执行文件名,`input.txt ` 为输入文件名, `output.txt ` 为输出文件名。经过程序处理, `output.txt` 的格式应该符合你的要求了。
基于A5/1算法用C语言设计一个本地文件加密工具,密钥固定存放于“key”文件中,用户指定目标文件则可对该文件进行加密 同时设计文件解密工具,依据密钥“key”文件,将加密后的文件进行解密还原
以下是基于A5/1算法用C语言设计的本地文件加密工具和解密工具的代码。请注意,A5/1算法已经被证明不是安全的加密算法,因此不建议在实际应用中使用。
加密工具代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define KEY_FILE "key"
#define BUFFER_SIZE 4096
typedef unsigned char byte;
byte key[64];
byte iv[3];
byte lfsr[3][19];
byte output[8];
void load_key()
{
FILE *fp = fopen(KEY_FILE, "rb");
if (fp == NULL) {
fprintf(stderr, "Error: cannot open key file.\n");
exit(1);
}
fread(key, sizeof(byte), 64, fp);
fclose(fp);
}
void init_lfsr()
{
int i, j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 19; j++) {
lfsr[i][j] = 0;
}
}
for (i = 0; i < 64; i++) {
int k = i / 19;
int l = i % 19;
lfsr[k][l] = (key[i / 8] >> (7 - (i % 8))) & 1;
}
for (i = 0; i < 22; i++) {
byte bit = ((lfsr[0][8] ^ lfsr[1][10] ^ lfsr[2][10]) & 1);
for (j = 0; j < 3; j++) {
byte feedback = ((lfsr[j][18] ^ lfsr[j][17]) & 1);
memmove(lfsr[j] + 1, lfsr[j], 18);
lfsr[j][0] = feedback;
}
memmove(iv + 1, iv, 2);
iv[0] = bit;
}
}
void generate_output()
{
int i;
for (i = 0; i < 8; i++) {
byte bit = ((lfsr[0][8] ^ lfsr[1][10] ^ lfsr[2][10]) & 1);
output[i] = bit;
int j;
for (j = 0; j < 3; j++) {
byte feedback = ((lfsr[j][18] ^ lfsr[j][17]) & 1);
memmove(lfsr[j] + 1, lfsr[j], 18);
lfsr[j][0] = feedback;
}
}
}
void encrypt_file(const char *input_file, const char *output_file)
{
FILE *ifp = fopen(input_file, "rb");
if (ifp == NULL) {
fprintf(stderr, "Error: cannot open input file.\n");
exit(1);
}
FILE *ofp = fopen(output_file, "wb");
if (ofp == NULL) {
fprintf(stderr, "Error: cannot open output file.\n");
fclose(ifp);
exit(1);
}
byte buffer[BUFFER_SIZE];
int bytes_read;
while ((bytes_read = fread(buffer, sizeof(byte), BUFFER_SIZE, ifp)) > 0) {
int i;
for (i = 0; i < bytes_read; i++) {
buffer[i] ^= output[i % 8];
}
fwrite(buffer, sizeof(byte), bytes_read, ofp);
generate_output();
}
fclose(ifp);
fclose(ofp);
}
int main(int argc, char *argv[])
{
if (argc != 3) {
fprintf(stderr, "Usage: %s <input_file> <output_file>\n", argv[0]);
exit(1);
}
load_key();
init_lfsr();
encrypt_file(argv[1], argv[2]);
return 0;
}
```
解密工具代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define KEY_FILE "key"
#define BUFFER_SIZE 4096
typedef unsigned char byte;
byte key[64];
byte iv[3];
byte lfsr[3][19];
byte output[8];
void load_key()
{
FILE *fp = fopen(KEY_FILE, "rb");
if (fp == NULL) {
fprintf(stderr, "Error: cannot open key file.\n");
exit(1);
}
fread(key, sizeof(byte), 64, fp);
fclose(fp);
}
void init_lfsr()
{
int i, j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 19; j++) {
lfsr[i][j] = 0;
}
}
for (i = 0; i < 64; i++) {
int k = i / 19;
int l = i % 19;
lfsr[k][l] = (key[i / 8] >> (7 - (i % 8))) & 1;
}
for (i = 0; i < 22; i++) {
byte bit = ((lfsr[0][8] ^ lfsr[1][10] ^ lfsr[2][10]) & 1);
for (j = 0; j < 3; j++) {
byte feedback = ((lfsr[j][18] ^ lfsr[j][17]) & 1);
memmove(lfsr[j] + 1, lfsr[j], 18);
lfsr[j][0] = feedback;
}
memmove(iv + 1, iv, 2);
iv[0] = bit;
}
}
void generate_output()
{
int i;
for (i = 0; i < 8; i++) {
byte bit = ((lfsr[0][8] ^ lfsr[1][10] ^ lfsr[2][10]) & 1);
output[i] = bit;
int j;
for (j = 0; j < 3; j++) {
byte feedback = ((lfsr[j][18] ^ lfsr[j][17]) & 1);
memmove(lfsr[j] + 1, lfsr[j], 18);
lfsr[j][0] = feedback;
}
}
}
void decrypt_file(const char *input_file, const char *output_file)
{
FILE *ifp = fopen(input_file, "rb");
if (ifp == NULL) {
fprintf(stderr, "Error: cannot open input file.\n");
exit(1);
}
FILE *ofp = fopen(output_file, "wb");
if (ofp == NULL) {
fprintf(stderr, "Error: cannot open output file.\n");
fclose(ifp);
exit(1);
}
byte buffer[BUFFER_SIZE];
int bytes_read;
while ((bytes_read = fread(buffer, sizeof(byte), BUFFER_SIZE, ifp)) > 0) {
int i;
for (i = 0; i < bytes_read; i++) {
buffer[i] ^= output[i % 8];
}
fwrite(buffer, sizeof(byte), bytes_read, ofp);
generate_output();
}
fclose(ifp);
fclose(ofp);
}
int main(int argc, char *argv[])
{
if (argc != 3) {
fprintf(stderr, "Usage: %s <input_file> <output_file>\n", argv[0]);
exit(1);
}
load_key();
init_lfsr();
decrypt_file(argv[1], argv[2]);
return 0;
}
```
这两个程序使用方法相同,例如:
```
$ ./encrypt input.txt output.enc
$ ./decrypt output.enc input_dec.txt
```
其中,`input.txt` 是要加密的文件名,`output.enc` 是加密后的文件名,`output.enc` 是加密后的文件名, `input_dec.txt`是解密后得到的文件名。