Số nguyên tố mạnh và số Amstrong
Wednesday, August 27, 2014
Cho một tệp văn bản
input.txt chứa các phần tử nguyên không âm, các phần tử cách nhau ít nhất một dấu
cách trống hoặc ít nhất một dấu xuống dòng. Viết chương trình kiểm tra các số
nguyên đọc ra từ tệp input.txt có phải là số nguyên tố mạnh và số Amstrong hay
không?. Đưa các số nguyên tố mạnh vào tệp văn bản output1.txt và các số
Amstrong vào tệp văn bản output2.txt.
Số nguyên tố mạnh và số Amstrong
-
Số nguyên
tố mạnh là số nguyên tố lớn hơn trung bình cộng của hai số nguyên tố liền trước
và liền sau nó.
Ví dụ: 11 là số nguyên tố mạnh vì
11>(7+13)/2
5 không phải là số nguyên tố mạnh vì
5=(3+7)/2
-
Số nguyên
dương có n chữ số gọi là số Amstrong nếu số đó bằng tổng các lũy thừa bậc n của
các chữ số của số đó.
Ví dụ: 153 là số Amstrong vì 153 = 13
+ 23 + 33
code bài 1: thay đổi mảng a,b bôi
vàng để thêm phần tử xét.
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <math.h>
using namespace std;
void docdl(unsigned long a[],unsigned long *n)
{
FILE
*u;
u=fopen("c:\\input.txt","rt");
while (!feof(u))
{
fscanf(u,"%lu",&a[*n]);
*n=*n+1;
}
fclose(u);
}
int amstrong(unsigned long n)
{
if (n==0) return 0;
int x= log10((float)n)
+ 1;
unsigned long
y=n,z=0,t;
while (y>0)
{
t=y%10;
z+=pow((float)t,x);
y=y/10;
}
if (z==n) return 1;
return 0;
}
int ktnto(unsigned long x)
{
if (x==0||x==1) return
0;
unsigned long i;
for ( i=2;(i*i)<=x; i++)
if (x%i==0) return 0;
return 1;
}
unsigned long max(unsigned long a[],unsigned long n)
{
unsigned long
max1=0,i;
for (i=0;i<n;i++) if
(a[i]>max1) max1=a[i];
return max1;
}
void sinhnto(unsigned long a[],unsigned long b[],unsigned long n)
{
unsigned long
i,j=0,t=max(a,n);
for (i=2;i<=t;i++)
{
if (ktnto(i))
{
b[j]=i;
j++;
}
}
i++;
while (ktnto(i)==0) i++;
b[j]=i;
}
int ktntomanh(unsigned long x,unsigned long b[])
{
unsigned long i=0;
if (x<=2) return
0;
while (x>b[i]) i++;
if (x!=b[i]) return
0;
if ((b[i-1]+b[i+1])<(2*b[i])) return 1;
return 0;
}
int main()
{
unsigned long
a[10000],b[10000],n=0,i;
FILE
*u,*v;
u=fopen("c:\\output1.txt","wt");
v=fopen("c:\\output2.txt","wt");
docdl(a,&n);
sinhnto(a,b,n);
for (i=0;i<n;i++)
{
if (ktntomanh(a[i],b)) fprintf(u,"%lu ",a[i]);
if (amstrong(a[i])) fprintf(v,"%lu ",a[i]);
}
fclose(v);
fclose(u);
printf("\n HOAN TAT 1");
getch();
}

All comments [ 0 ]
Your comments