Задача на двоичный код

  • Автор темы MikeMNN
  • Дата начала
M

MikeMNN

#1
Дана следующая задача:Определить,является ли периодической последовательностью двоичная запись некоторого натурального числа N, т.е. записана ли она в виде ааааааа....а, где а-некоторая непустая последовательность....

Написать программу надо в Визуал Студио...

У меня получился следующий код:

C++:
#include<stdio.h>
#include<conio.h>
#include<locale.h>
#define h 500
void mat(int a[][h],int b[],int q,int r){
int w,e,u;
u=0;
for(w=0;w<q;w++)
for(e=0;e<r;e++,u++){a[w][e]=0;
a[w][e]=b[u];};}
void main()
{		setlocale(LC_CTYPE,"Russian");
int i,j,k,n,f,t,p,x[h],y[h],m,z,c,v[h][h];
printf_s("Введите натуральное число N=");
scanf("%d",&n);
for(i=0;n!=0;i++)
{		k=n%2;
n=n/2;
x[i]=k;}
p=i-1;
for(f=0;f<i;f++){
y[f]=x[p]; p=p-1;}
z=f;
if(z!=3&&z%2!=0&&z%3!=0){p=2;for(i=0;i<z&&p!=0;i++)
if(y[i]!=1)p=0;}
t=1;
if(p!=2&&p!=0)
for(i=f/2,k=0;i>k&&t>0;i--)
if(f%i==0){ j=f/i; t=0;
mat(v,y,j,i);
for(c=0;c<(j-1)&&t==0;c++)
for(m=0;m<i&&t==0;m++)
if(v[c][m]!=v[c+1][m])t++;}

if(t==0||p==2)
{printf_s("\n Двоичная запись заданного числа является периодической последовательностью,а повторяется L=");
if(t==0)
for(i=0;i<m;i++) printf_s("%d",v[0][i]);
else printf_s("1");}
else printf_s("\n Двоичная запись заданного числа не является периодической последовательностью");
_getch();
}
но преподаватель сказал,что можно решить другим путём и оптимизировать... Может кто предложить что-нибудь:оптимизацию,ну,или абсолютно другой метод решения?