由于数据比较弱,所以没用欧拉函数直接枚举也可以过。

思路:n为1或者n为2的倍数时一定不存在,为奇数时一定存在。    (ab) % n = (a%n * b%n) % n;

CODE:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;

int main()
{
    int n;
    while(~scanf("%d", &n))
    {
        int i;
        if(n == 1 || n%2 == 0)
        {
            printf("2^? mod %d = 1\n", n);
            continue;
        }
        long ans = 2;
        for(i = 01; i++)
        {
            if(ans%n == 1break;
            ans = (ans%n * 2%n)%n;
        }
        printf("2^%d mod %d = 1\n", i+1, n);
    }
    return 0;

} 

posted on 2012-08-17 09:58  有间博客  阅读(137)  评论(0编辑  收藏  举报