题目:http://codeforces.com/gym/100792/problem/A
题意:在一个b进制的数字系统下。如果x和y(均用b进制表示)的长度相等且组成的数字相同(只是排列不同),那么x和y叫做b-anagram.
一个数k如果叫做b-stable那么对于这个数所有的倍数他们都互相成为b-anagram.
给定一个b求所有的k.
解答:定义一个数k.把写成b进制的方式如ABCDE.然后再把它写成十进制的方式.显然它模k等于0.如果abcde重新排列仍然是k的倍数的话,那么b的0次方、1次方、2次方。。。模k都等于1(因为b的0次方等于1)。那么可以得出结论。这个b模k肯定等于1.那么如果b模k等于1.如果从1开始扫扫到b会超。考虑b-1模k等于0.然后寻找所有b-1模k等于0的 k.(它只用扫根号b次)
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
int arr[100000];
int main()
{
int n;
scanf("%d",&n);
n--;
int pos = 0;
for(int i = 1;i <= (int)sqrt(n);i++)
{
if(n % i == 0)
{
arr[pos++] = i;
arr[pos++] = n/i;
}
}
sort(arr,arr+pos);
printf("1");
for(int i = 0;i < pos;i++)
{
if(i)
{
if(arr[i]!=arr[i-1])
printf(" %d",arr[i]);
}
}
printf("\n");
return 0;