浙大的acm题目,帮我看下错在哪里

来源:百度知道 编辑:UC知道 时间:2024/05/12 03:39:39
题目:http://acm.zju.edu.cn/show_problem.php?pid=1489
我的程序:
#include<iostream>
using namespace std;
int main(){
int n,b;
int a;
__int64 k;
while(scanf("%u",&n)!=EOF){
if(n==1||(n&1)==0){
printf("%d%c%c mod %d = %d\n",2,'^','?',n,1);
}
else{
for(a=1;a<n;a++){
k=1;
k<<=a;
if(k%n==1){
printf("%d%c%d mod %d = %d\n",2,'^',a,n,1);
break;
}
}
}
}
return 0;
}
我用dev c++编译了,测试一下结果是正确的啊,但提交上去老是说我
Compilation Error
上面的那个应该是结束输入的标志没搞好,可是改了还是没发ac!!!
#include<iostream>
#include<stdio.h>
using namespace std;
int main(){
int n;
int a;
long long k;
while(scanf("%u",&n)){
if(n==0){
break;
}<

你的算法不对!稍微大一点的数就tle了。

这是数论的题目,死算是不行的,建议您好好看书吧。

我这里给个思路:

若2整除n,无解。

否则,必有最小的解k,而且k整除φ(n)【φ(n)是一个数论函数,有一堆性质,你可以查查书。】
只要求出φ(n),然后遍历φ(n)的约数就可以了。

估计你选错语言了吧..或者你可以试试把int n,b;的b去掉..因为你没有用到b

输入输出不正确

题目要求的是输入所有的N之后由程序输出所有的结果

建议你用VECTOR全部读入之后再依次处理