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();
}


       

Chia sẻ bài viết ^^
Other post

All comments [ 0 ]


Your comments